1. 如何用c语言定义STM8_EEPROM二维数组
#define EEPROM_SPACE_NUM (E2PROM容量大小)
#define PAGE_NUM (页面大小)
char Array_EEprom_Data[PAGE_NUM ][EEPROM_SPACE_NUM /PAGE_NUM ];
2. 最近在看STM8S单片机,头都大了,想请问下在STM8S中,
你这是在声明函数原型,所以应当声明每种参数的类型。
但是当你在声明这个函数原型的时候,还没有告诉系统GPIOD等等类型到底是什么。
另外你这里到底是要声明原型、还是要调用啊???如果是后者,应当把前面的void去掉。
说白了,这是C语言的基础能力问题,跟STM8S没什么太大关系。
3. STM8S系列单片机如何使用printf函数
这跟单片机没关系,这是C语言的库函数
使用时只需将 putc函数(被printf函数调用)换成串囗发送函数即可,换了之后优先调用用户编写的putc函数
4. 求懂STM8单片机C语言编程的人帮我解释一段程序,在线等!
700块钱 帮你做
5. 有人知道STM8 和STM32 单片机c语言编程怎样获取PC程序计数器值吗
程序跳转的时候返回地址都会被压入SP的把
反相取SP指针的内容应该可以获取程序地址
6. stm8的空指令延时c语言怎样写
单片机的C语言关于延时函数主要有两种一种是用for循环,通过单片机执行空指令达到延时的目的如:for(i=0;i<100;i++){;}这个简单的语句会执行100次空指令每一次指令的时间可以大概确定因此这个是最简单的延时函数第二种是通过定时器的方式来实现定时器是通过对单片机的晶振进行计数然后在定时器中断服务函数里面实现定时时间的计算及设置51单片机的定时器0中断服务函数为voidtime0()interrupt1{}
7. STM8的C语言延时及外部中断编程
研究了下,你描述的逻辑好像有矛盾,
我疑问如下:
控制过程如下:
pin17(PC7)收到低电平脉冲信号(脉冲长度多少?),
计时器启动(计数时间5秒?),
pin19(PD2)输出高电平(在计数计数结束后输出低电平?);
当m为奇数时,pin13(PC3)输出高电平(PIN14输出低电平?);
当m为偶数时,pin14(PC4)输出高电平(PIN13输出低电平?)。
最终计数结束后输出状态如何?
pin10(PA3)有高电平脉冲信号输入时(脉冲长度多少?),
pin19(PD2)停止输出(输出低电平还是高电平?);
如果在一个计时周期内(5秒吗?),
pin10(PA3)没有高电平信号输入(一直维持低电平吗?),
则pin18(PD1)输出高电平(有高电平脉冲信号时输出低电平?)。
pin15(PC5)有高电平脉冲信号输入时(脉冲长度多少?),
pin13(PC3)停止输出(输出低电平还是高电平?);
如果在一个计时周期内(5秒吗?),
pin15(PC5)没有高电平信号输入(一直维持低电平吗?),
且计数器值m为奇数,则pin18(PD1)输出高电平(m是偶数时怎么处理?)。
。。。。。。。。。。。
主要程序到底是触发后输出一个序列电平还是测量输入脉冲?
8. 谁用IAR给 STM8S003F3 单片机用C语言写个程序 用一个按键控制一个LED
这个很简单吧 做一个变量然后取反不就行了嘛
这是最简单的基础知识了。
9. 单片机c语言编程
单片机的外部结构:
DIP40双列直插;
P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平)
电源VCC(PIN40)和地线GND(PIN20);
高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位)
内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍)
程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序)
P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1
单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务)
四个8位通用I/O端口,对应引脚P0、P1、P2和P3;
两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1)
一个串行通信接口;(SCON,SBUF)
一个中断控制器;(IE,IP)
针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。教科书的160页给出了针对MCS51系列单片机的C语言扩展变量类型。
C语言编程基础:
十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。
如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。
++var表示对变量var先增一;var—表示对变量后减一。
x |= 0x0f;表示为 x = x | 0x0f;
TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。
While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;}
在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚)
#include <AT89x52.h> //该头文档中有单片机内部资源的符号化定义,其中包含P1.3
void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
{
P1_3 = 1; //给P1_3赋值1,引脚P1.3就能输出高电平VCC
While( 1 ); //死循环,相当 LOOP: goto LOOP;
}
注意:P0的每个引脚要输出高电平时,必须外接上拉电阻(如4K7)至VCC电源。
在某引脚输出低电平的编程方法:(比如P2.7引脚)
#include <AT89x52.h> //该头文档中有单片机内部资源的符号化定义,其中包含P2.7
void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口。
{
P2_7 = 0; //给P2_7赋值0,引脚P2.7就能输出低电平GND
While( 1 ); //死循环,相当 LOOP: goto LOOP;
}
在某引脚输出方波编程方法:(比如P3.1引脚)
#include <AT89x52.h> //该头文档中有单片机内部资源的符号化定义,其中包含P3.1
void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
{
While( 1 ) //非零表示真,如果为真则执行下面循环体的语句
{
P3_1 = 1; //给P3_1赋值1,引脚P3.1就能输出高电平VCC
P3_1 = 0; //给P3_1赋值0,引脚P3.1就能输出低电平GND
} //由于一直为真,所以不断输出高、低、高、低……,从而形成方波
}
将某引脚的输入电平取反后,从另一个引脚输出:( 比如 P0.4 = NOT( P1.1) )
#include <AT89x52.h> //该头文档中有单片机内部资源的符号化定义,其中包含P0.4和P1.1
void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
{
P1_1 = 1; //初始化。P1.1作为输入,必须输出高电平
While( 1 ) //非零表示真,如果为真则执行下面循环体的语句
{
if( P1_1 == 1 ) //读取P1.1,就是认为P1.1为输入,如果P1.1输入高电平VCC
{ P0_4 = 0; } //给P0_4赋值0,引脚P0.4就能输出低电平GND
else //否则P1.1输入为低电平GND
//{ P0_4 = 0; } //给P0_4赋值0,引脚P0.4就能输出低电平GND
{ P0_4 = 1; } //给P0_4赋值1,引脚P0.4就能输出高电平VCC
} //由于一直为真,所以不断根据P1.1的输入情况,改变P0.4的输出电平
}
将某端口8个引脚输入电平,低四位取反后,从另一个端口8个引脚输出:( 比如 P2 = NOT( P3 ) )
#include <AT89x52.h> //该头文档中有单片机内部资源的符号化定义,其中包含P2和P3
void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口
{
P3 = 0xff; //初始化。P3作为输入,必须输出高电平,同时给P3口的8个引脚输出高电平
While( 1 ) //非零表示真,如果为真则执行下面循环体的语句
{ //取反的方法是异或1,而不取反的方法则是异或0
P2 = P3^0x0f //读取P3,就是认为P3为输入,低四位异或者1,即取反,然后输出
} //由于一直为真,所以不断将P3取反输出到P2
}
注意:一个字节的8位D7、D6至D0,分别输出到P3.7、P3.6至P3.0,比如P3=0x0f,则P3.7、P3.6、P3.5、P3.4四个引脚都输出低电平,而P3.3、P3.2、P3.1、P3.0四个引脚都输出高电平。同样,输入一个端口P2,即是将P2.7、P2.6至P2.0,读入到一个字节的8位D7、D6至D0。