《大学实用英语phrases&exphressions》由会员分享,可在线阅读,更多相关《大学实用英语phrases&exphressions(13页珍藏版)》请在金锄头文库上搜索。
1、单单片片机机编编程程格格式式单单片片机机编编程程是是基基于于 C 语语言言的的一一种种简简单单实实用用的的编编程程语语言言, ,跟跟 C 语语言言编编程程类类似似。 。开开头头都都是是要要加加上上头头文文件件预预处处理理命命令令: :#include当当然然还还要要加加上上所所有有用用得得到到的的函函数数库库, ,同同样样是是#include0;) i-;P1=ai;delay(1000);void delay(int s)while(s-);当当这这些些知知识识都都掌掌握握的的时时候候, ,下下一一个个就就应应该该是是中中断断系系统统的的知知识识了了, ,中中断断系系统统中中, ,最最先先学
2、学的的是是定定时时器器, ,定定时时器器实实际际是是这这种种东东西西: :纸纸老老虎虎!开开始始的的时时候候总总是是看看不不明明白白这这是是什什么么, ,当当真真正正掌掌握握的的时时候候会会发发现现, ,它它实实际际比比其其他他的的东东西西还还简简单单, ,在在这这我我就就给给大大家家说说说说十十六六位位定定时时器器的的例例子子。 。中断必中断必须须条件:条件:三要素:中断三要素:中断请请求;求;总总中断允中断允许许; ;相相应应中断允中断允许许响响应应。 。开开总总中断:中断:EA=1上上图图就是相就是相应应中断在中断在编编程中的名字,可以直接使用。程中的名字,可以直接使用。允允许许外部外部
3、/定定时时器中断器中断ET0/ET1/EX0/EX1=1void 函数名()函数名()interrupt 中断序号中断序号 跟主函数一跟主函数一样样,写,写处处理内容。理内容。定定时时器主要内容:器主要内容:还还是一是一样样,先开,先开总总中断开关中断开关EA=1选择选择中断方式,打开相中断方式,打开相应应中断:中断:ET0/ET1=1TH0=(65536-50000【 【这这里是要定里是要定时时的的时间时间, ,单单位位/微秒微秒】 】)/256 这这是是高八位的数高八位的数值值TL0=(65535-50000【 【同上同上】 】)%256 这这个是低八位数个是低八位数值值( (TH0,TL
4、0)是溢出的容器,)是溢出的容器,刚刚才的才的值值就是容器里的初始量,空就是容器里的初始量,空闲闲的的值值就是所求就是所求时间时间。溢出后中断。溢出后中断发发生,容器清零。生,容器清零。这这就是每次都就是每次都给给 TH0/TL0 赋值赋值的原因的原因.其中其中 TH0 是高八位,是高八位,TL0 是低八位。是低八位。TMOD=0xM0M1;(;(M0M1 是是 01,10,11 等地等地这样这样的数)的数)方式中用的是方式中用的是 M0M1,是低八位的最后两位,是低八位的最后两位定定时时器中断器中断 0/1 打开:打开:ET0/1=1TRO/1=1;这这是启是启动动定定时时器,必不可少器,必
5、不可少中断函数:中断函数:void 函数名函数名() interrupt 工作方式的序号工作方式的序号容器容器值值清零就是清零就是 THO/TL0 等地重新等地重新赋值赋值的原因。然后就是中断的原因。然后就是中断函数函数处处理内容,跟主函数一理内容,跟主函数一样样。 。这这里主要是里主要是处处理一个或一些数,理一个或一些数,然后然后这这个数在主函数中个数在主函数中处处理,也就是理,也就是说这说这里的函数相里的函数相对说简单对说简单的,的,主要的主要的处处理理还还是在主函数中。是在主函数中。工作方式工作方式优优先表:先表:定定时时器工作原理:器工作原理:工作方式:工作方式:(这这里里说说的是的是
6、 TMOD 后两位的,既是后两位的,既是 M1M0,高四位,高四位是是 T1,低四位是,低四位是 T0) GATE:门门控位。当控位。当为为零零时时,只要用,只要用软软件使件使 TCON 中的中的 TR0 或或TR1 为为 1,就可以启,就可以启动动定定时时器器/计计数器;当数器;当 GATE=1 时时用用软软件使件使TR0 或或 TR1 为为 1,同,同时时外部中断引脚也外部中断引脚也为为高高电电平平时时,才能启,才能启动动定定时时器器/计计数器工作,也就是数器工作,也就是说说定定时时器的启器的启动动多了一个条件。多了一个条件。在此,在此,给给出自己出自己编编写的每隔一秒写的每隔一秒变变一个
7、数的程序。一个数的程序。显显示是示是这样这样的:的:从第一位开始,先从第一位开始,先显显示示 0,一秒,一秒钟钟后零后零灭灭,第二个数,第二个数码码管管显显示示 1, ,以此以此类类推。当推。当显显示到示到 7 的的时时候,再从新从第一个数候,再从新从第一个数码码管开始亮,管开始亮,这这次是次是 89ABCDEF 这这几个数一个一个的几个数一个一个的显显示。然后就是一直循示。然后就是一直循环环下去。也是最下去。也是最简单简单的定的定时显时显示,前示,前辈辈莫笑。莫笑。#includesbit wela=P26sbit dula=P27void main()unsigned char wei=0
8、xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;unsigned char duan=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;unsigned int i=0,t=0;EA=1;ET0=1;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TOMD=0x01;TR0=1;while(1) while(20-t);t=0;wela=1;if(i7)P1=weii-8;elseP1=weii;wela=0;P1=duani;i+;if(i=16)i=0;void time0() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256; t+;