完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
|
|
相关推荐
1个回答
|
|
|
利用定时/计数器T0产生定时时钟,由P1口控制8个发光二极管。
编一个程序,使8个指示灯依次一个一个闪动,闪动频率为10次/秒 (8个灯依次亮一遍为一个周期)。设晶振频率为12MHz。 代码: 1 /********************************************************* 利用定时/计数器T0产生定时时钟,由P1口控制8个发光二极管。 编一个程序,使8个指示灯依次一个一个闪动,闪动频率为10次/秒 (8个灯依次亮一遍为一个周期)。 **********************************************************/ #include #include #define uint unsigned int #define uchar unsigned char uchar num,leds; void main() { leds=0xfe;//初始化 位变量leds num=0;//初始化 计数变量num EA=1;//打开特殊功能寄存器IE内的总开关EA ET0=1;//打开特殊功能寄存器IE内的开关ET0 TMOD=0X01;//0000 0001,低四位,GATE=0,C/T=0,M1M0=01;选用中断源T0,方式1,16位定时器 /*TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能。*/ TH0=(65536-50000)/256;//初始化,装填初值 TL0=(65536-50000)%256; /*这里是从15536(=65536-50000)位置开始计数,逐次加1,直到65535位置即将溢出,再加1,回到0 共50000次"加1",机器周期为1us时,每次加1耗时1us,全程耗时50ms*/ TR0=1;//启动定时器 while(1) { //经历100ms(=2*50ms) if(num==2) { P1=leds;//点亮对应位的led } //再经历100ms(=(4-2)*50ms) if(num==4) { num=0;//初始化计数变量 P1=0xff;//所有位led熄灭 leds=_crol_(leds,1);//按位循环左移一位,1111 1110-->1111 1101-->1111 1011 } } } //中断函数 中断源:"定时/计数器0(T0)",代号1 void time0() interrupt 1 { TH0=(65536-50000)/256;//初始化,装填初值 TL0=(65536-50000)%256; num++;//计数变量自增,num每增加1,耗时50ms(=50000*1us) } |
|
|
|
|
只有小组成员才能发言,加入小组>>
1599 浏览 0 评论
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
4738 浏览 0 评论
4229 浏览 9 评论
3822 浏览 16 评论
4398 浏览 1 评论
4210浏览 3评论
2379浏览 0评论
3393浏览 0评论
1158浏览 0评论
2843浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 20:29 , Processed in 1.458473 second(s), Total 74, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3278