TL0=(8192-C)2; //可证明这是13位计数器TL0低5位的赋初值方法 } 、 实例51
本例用单片机U1从P1。4引脚输出正脉宽为250μs的方波,再利用单片机U2的into引脚检测,验证方波的正脉冲宽度,有点没看懂 //实例51-2:定时器T0的模式2测量正脉冲宽度
#include
sbit ui=P3^2; //将ui位定义为P3.0(INT0)引脚,表示输入电压 /******************************************* 函数功能:主函数
******************************************/ void main(void) {
TMOD=0x0a; // TMOD=0000 1010B,使用定时器T0的模式2,GATE置1 EA=1; //开总中断 ET0=0; //不使用定时器T0的中断 TR0=1; //启动T0 TH0=0; //计数器T0高8位赋初值 TL0=0; //计数器T0低8位赋初值 while(1) //无限循环,不停地将TL0计数结果送P1口 { while(ui==0) //INT0为低电平,T0不能启动 ; TL0=0; //INT0为高电平,启动T0计时,所以将TL0清0 while(ui==1) //在INT0高电平期间,等待,计时 ; P1=TL0; //将计时结果送P1口显示 } }
//实例51-1:输出正脉宽为250微秒的方波
#include
******************************************/ void main(void) {
TMOD=0x02; //TMOD=0000 0010B,使用定时器T0的模式2 EA=1; //开总中断
ET0=1; //定时器T0中断允许 TH0=256-250; //定时器T0的高8位赋初值 TL0=256-250; //定时器T0的高8位赋初值 TR0=1; //启动定时器T0 while(1) //无限循环,等待中断 ; }
/************************************************************** 函数功能:定时器T0的中断服务程序
**************************************************************/
void Time0(void) interrupt 1 using 0 //\声明函数为中断服务函数 {
u=~u; //将P1.4引脚输出电平取反,产生方波 } 第7章
MCS51单片机串行4中工作方式??、
为了能够在计算机端看到单片机发出的数据,较好的方法是借助于调试软件“串口调试助手” 第8章 P197页图 第9章
I^2C总线是Inter Integrated Circuit Bus 内部集成电路总线
千万不要认为只要程序对了,单片机就可以永远正确运行,实际工作环境的各种干扰会导致单片机死机。 X5045
具有上电复位和降压管理的功能,还具有看门狗定时器和具有块保护功能的串行EEPROM。
上电复位;上电就产生复位信号,
看门狗; 规定时间没有电平信号 就产生复位信号,利用该功能可以让单片机死机后自动重新复位
第10章
A/D转换器;逐次逼近(常用) 双积分牛但慢 并行 红外信号接收
红外发射部分包括键盘矩阵,编码调制 LED红外发送器 接收器包括光电转换放大器 解调电路 解码电路
中断定时器程序其实隐藏了调用。 定时中断一次还需重新赋值一次。
void Time0(void) interrupt 1 using 1每个字符都要空格 LED0=!LED0; //P3.0引脚取反
While(1)前面赋值确定原先的状态
判断端口是否是低电平应该这样if(S1==0) 而不是if(S1=0)
函数功能:键盘扫描子程序
**************************************************/ void key_scan(void) {
if((P1&0xf0)!=0xf0) //第一次检测到有键按下 { delay30ms(); //延时20ms再去检测 if(S1==0) //按键S1被按下 keyval=1; if(S2==0) //按键S2被按下 keyval=2; if(S3==0) //按键S3被按下 keyval=3; if(S4==0) //按键S4被按下 keyval=4;
sbit S1=P1^4; //将S1位定义为P1.4引脚 sbit S2=P1^5; //将S2位定义为P1.5引脚 sbit S3=P1^6; //将S3位定义为P1.6引脚 sbit S4=P1^7; //将S4位定义为P1.7引脚 有零则与逻辑与一起必然为零 }
相关推荐: