单片机原理与应用技术重点程序高惠芳ppt课件.ppt
《单片机原理与应用技术重点程序高惠芳ppt课件.ppt》由会员分享,可在线阅读,更多相关《单片机原理与应用技术重点程序高惠芳ppt课件.ppt(90页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、单片机原理与应用技术重点程序高惠芳ppt课件 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望 例例例例3 322设设设设内内内内部部部部RAMRAM中中中中30H30H单单单单元元元元的的的的内内内内容容容容为为为为40H 40H,40H40H单单单单元元元元的的的的内内内内容容容容为为为为10H10H,P1P1口口口口作作作作输输输输入入入入口口口口,其其其其输输输输入入入入数数数数据据据据为为为为0CAH0CAH,程程程程序序序序及及及及执执执执行行行行后的结
2、果如下:后的结果如下:后的结果如下:后的结果如下:MOV R0MOV R0,#30H#30H ;单元地址;单元地址;单元地址;单元地址30H30H送送送送R0R0中中中中MOV A MOV A ,R0 R0 ;R0 R0 间址,将间址,将间址,将间址,将30H30H单元内容送单元内容送单元内容送单元内容送A AMOV R1 MOV R1,A A ;A A送送送送R1R1MOV B MOV B,R1R1 ;R1R1间址,将间址,将间址,将间址,将40H40H单元内容送单元内容送单元内容送单元内容送B BMOV R1MOV R1,P P 1 1 ;将;将;将;将P1P1内容送内容送内容送内容送40
3、H40H单元单元单元单元MOV P2 MOV P2,P1 P1 ;将;将;将;将P1P1内容送内容送内容送内容送P2P2 执执执执行行行行结结结结果果果果:(R0)=30H(R0)=30H,(R1R1)=40H=40H,(A A)=40H=40H,(B B)=10H=10H,(P1P1)=0CAH=0CAH,(40H40H)=0CAH=0CAH,(P2)=0CAH(P2)=0CAH 例例例例3 355 已已已已知知知知外外外外部部部部RAM RAM 20202020HH单单单单元元元元中中中中有有有有一一一一个个个个数数数数X X,内内内内部部部部RAM RAM 20H20H单单单单元元元元一
4、一一一个个个个数数数数Y Y,试试试试编编编编出出出出可可可可以以以以使使使使它它它它们们们们互互互互相相相相交交交交换换换换的的的的程程程程序。序。序。序。解:解:解:解:MOV P2MOV P2,#2020H H MOV R1 MOV R1 ,#2020HH MOVX A MOVX A ,R1 R1 XCHXCH A A,R1R1 MOVX R1 MOVX R1,A A SJMP$SJMP$END END指向内部指向内部指向内部指向内部RAMRAM20H20H单元单元单元单元指向外部指向外部指向外部指向外部RAMRAM2020H2020H单元单元单元单元 例例例例3 377 把把把把01H
5、01H单元内容送单元内容送单元内容送单元内容送02H02H单元,有几种不同的实现方法。单元,有几种不同的实现方法。单元,有几种不同的实现方法。单元,有几种不同的实现方法。MOV 02H MOV 02H ,01H01H;直接寻址直接寻址直接寻址直接寻址 3 3字节字节字节字节 2 2周期周期周期周期 MOV A MOV A ,01H01H ;直接寻址;直接寻址;直接寻址;直接寻址 +寄存器寻址寄存器寻址寄存器寻址寄存器寻址 MOV 02H MOV 02H ,A A ;4 4字节字节字节字节 2 2周期周期周期周期 MOV A MOV A ,R1R1 ;寄存器寻址寄存器寻址寄存器寻址寄存器寻址 2
6、 2字节字节字节字节 2 2周期周期周期周期 MOV R2 MOV R2 ,A A MOV R0 MOV R0 ,#01H#01H;4 4字节字节字节字节 3 3周期周期周期周期 MOV 02H MOV 02H ,R0R0;间接寻址间接寻址间接寻址间接寻址 PUSH 01H PUSH 01H ;栈操作栈操作栈操作栈操作 4 4字节字节字节字节 4 4周期周期周期周期 POP 02HPOP 02H 第三种方法占存储空间少,执行周期短第三种方法占存储空间少,执行周期短第三种方法占存储空间少,执行周期短第三种方法占存储空间少,执行周期短。补充:补充:设20H,21H单元存放一个16位2进制数X1(高
7、8位存于21H单元);30H,31H单元存放一个16位2进制数X2,(高8位存于31H单元);求X1+X2,结果存放于20H,21H。(两数之和不超过16位)答案ORG 0000HAJMP mainORG 0100HMAIN:MOV 20H,#12HMOV 21H,#34HMOV 30H,#23HMOV 31H,#45HMOV A,20HADD A,30HMOV 20H,AMOV A,21HADDC A,31HMOV 21H,A SJMP$END1234H+#2345H=#3579H例例4.3.1 将片内将片内RAM 30H单元中的两位单元中的两位压缩压缩BCD码转换成二进制数送到片内码转换成
8、二进制数送到片内RAM 40H单元中单元中.(P63)ORG 1000HSTART:MOV A,30H ;取两位取两位BCD压缩码压缩码a1a0送送AANL A,#0F0H ;取高取高4位位BCD码码a1SWAP A ;高高4位与低位与低4位换位位换位MOV B,#0AH ;将二进制数将二进制数10送入送入BMUL AB ;将将10a1送入送入A中中MOV R0,A ;结果送入结果送入R0中保存中保存MOV A,30H ;再取两位再取两位BCD压缩码压缩码a1a0送送AANL A,#0FH ;取低取低4位位BCD码码a0ADD A,R0 ;求和求和10a1+a0MOV 40H,A ;结果送入结
9、果送入40H保存保存SJMP$;程序执行完,程序执行完,“原地踏步原地踏步”END例例4.3.2 将内部将内部RAM中中20H单元的压缩单元的压缩BCD码拆开,转换成相应的码拆开,转换成相应的ASC码,存码,存入入21H、22H,高位存,高位存22H.(P64)ORG 1000HSTART:MOV A,20H ;取压缩取压缩BCD码码ANL A,#0FH ;取低位取低位BCD码码 ADD A,#30H ;转换为低位转换为低位ASCII码码MOV 21H,A ;保存低位保存低位ASCII码码MOV A,20H ;重新取压缩重新取压缩BCD码码ANL A,#0F0H ;分离高位分离高位BCD码码S
10、WAPA ;得到高位得到高位BCD码码ADD A,#30H ;转换为高位转换为高位ASCII码码MOV 22H,A ;保存高位保存高位ASCII码码SJMP$END补充举例:三字节无符号数相加,其中被补充举例:三字节无符号数相加,其中被加数在内部加数在内部RAM的的50H、51H和和52H单元单元中;加数在内部中;加数在内部RAM的的53H、54H和和55H单元中;要求把相加之和存放在单元中;要求把相加之和存放在50H、51H和和52H单元中进位存放在位寻址区的单元中进位存放在位寻址区的20H单单元最低位中(即元最低位中(即20H.0)。)。分析分析:除最低字除最低字节可以使用可以使用ADD指
11、令之外,其指令之外,其它字它字节相加相加时要把低字要把低字节的的进位考位考虑进去,因去,因此使用此使用ADDC指令指令.MOV 00H,C#20H分支程序是通分支程序是通过转移指令移指令实现的的一、一、单分支程序分支程序 使用条件使用条件转移指令移指令实现,即根据条件,即根据条件对程序的程序的执行行进行判断,行判断,满足条件足条件则进行程序行程序转移,否移,否则程序程序顺利利执行。行。可可实现单分支程序分支程序转移的指令有:移的指令有:JZ、JNZ、CJNE、DJNZ等等还有以位状有以位状态作作为条件条件进行程序分支的指令:行程序分支的指令:JC、JNC、JB、JNB和和JBC等等(1)单分支
12、分支结构构举例例例例4.3.3 求符号函数的值。已知片内求符号函数的值。已知片内RAM的的40H单元单元内有一自变量内有一自变量X,编制程序按如下条件求函数编制程序按如下条件求函数Y的值,的值,并将其存入片内并将其存入片内RAM的的41H单元中。见单元中。见P651 X00 X=0-1 X0Y=ORG 1000HSTART:MOV A,40H;将将X送入送入A中中 JZ COMP ;若若A为为0,转至,转至COMP处处 JNB ACC.7,POST ;若若A第第7位不为位不为1(X为正数),为正数),;则程序转到则程序转到 POST处,处,;否则(否则(X为负数)程序往下执行为负数)程序往下执
13、行 MOV A,#0FFH ;将将 1(补码)送入(补码)送入A中中 SJMP COMP ;程序转到程序转到COMP处处POST:MOV A,#01H ;将将+1送入送入A中中COMP:MOV 41H,A ;结果存入结果存入Y SJMP$;程序执行完,程序执行完,“原地踏步原地踏步”END补充充举例:假定在外部例:假定在外部RAM中有中有ST1、ST2、ST3共共3个个连续单元,其中元,其中ST1和和ST2单元中分元中分别存放着两个存放着两个8位无符号二位无符号二进制数,制数,要求要求找出其中的大数并存入找出其中的大数并存入ST3单元中。元中。MOV A,R2一、单重循环程序例例4.3.5 已
14、知片内已知片内RAM30H3FH单元中存放了单元中存放了16个二进个二进制无符号数,编制程序求他制无符号数,编制程序求他们的累加和,并将其和数存们的累加和,并将其和数存放在放在R4,R5中(中(R4存高存高8位,位,R5存低存低8位)。见位)。见P69ORG 1000HSTART:MOV R0,#30H MOV R2,#10H ;设置循环次数(设置循环次数(16)MOV R4,#00H ;和高位单元和高位单元R4清清0 MOV R5,#00H ;和低位单元和低位单元R5清清0LOOP:MOV A,R5 ;和低和低8位的内容送位的内容送A ADD A,R0 ;将将R0与与R5的内容相加的内容相加
15、 MOV R5,A ;低低8位的结果送位的结果送R5 CLR A ;A清清0 ADDC A,R4 ;将将R4的内容和的内容和Cy相加相加 MOV R4,A ;高高8位的结果送位的结果送R4 INC R0 ;地址递增(加地址递增(加1)DJNZ R2,LOOP ;若循环次数减若循环次数减1不为不为0,则转,则转 ;到到LOOP处循环处循环,否则,循环结束否则,循环结束 SJMP$END例例4.3.6 编制程序将片编制程序将片内内RAM的的30H4FH单元中的内容传送至单元中的内容传送至片外片外RAM的的2000H开开始的单元中。(见始的单元中。(见P70)程序如下:程序如下:ORG 1000HS
16、TART:MOV R0,#30H MOV DPTR,#2000H MOV R2,#20H ;设置循环次数设置循环次数LOOP:MOV A,R0 ;将片内将片内RAM数据区内容送数据区内容送A MOVX DPTR,A ;将将A的内容送片外的内容送片外 ;RAM数据区数据区 INC R0 ;源地址递增源地址递增 INC DPTR ;目的地址递增目的地址递增 DJNZ R2,LOOP ;若若R2的不为的不为0,则转到,则转到 ;LOOP处继续循环处继续循环,否则循环结束否则循环结束 SJMP$END2、较长时间的定时程序、较长时间的定时程序较长时间的定时,通常采用多重循环的方法较长时间的定时,通常采
17、用多重循环的方法1个机器周期个机器周期1个机器周期个机器周期2个机器周期个机器周期4个机器周期个机器周期最大定时时间计算公式为:最大定时时间计算公式为:(4256+2+1)2562s2s+2 s=525828(s)2个机器周期个机器周期1个机器周期个机器周期1个机器周期个机器周期1个机器周期个机器周期第四章 单片机C语言程序设计 sbit位类型符用于定义在可位寻址字节或特殊功能寄存器位类型符用于定义在可位寻址字节或特殊功能寄存器中的位,定义时须指明其位地址,中的位,定义时须指明其位地址,可以是位直接地址,可可以是位直接地址,可以是可位寻址变量带位号,也可以是特殊功能寄存器名带以是可位寻址变量带
18、位号,也可以是特殊功能寄存器名带位号。格式如下:位号。格式如下:sbit 位变量名位变量名=位地址;位地址;1、位地址为位直接地址,其取值范围为、位地址为位直接地址,其取值范围为0 x000 xff;2、位地址是可位寻址变量带位号或特殊功能寄存器名带、位地址是可位寻址变量带位号或特殊功能寄存器名带位号,则在它前面须对可位寻址变量或特殊功能寄存器进位号,则在它前面须对可位寻址变量或特殊功能寄存器进行定义。行定义。Note:字节地址与位号之间、特殊功能寄存器与位号之间一:字节地址与位号之间、特殊功能寄存器与位号之间一般用般用“”作间隔。作间隔。第四章 单片机C语言程序设计【例例5-5】sbit型变
19、量的定义。sbit OV=0 xd2;sbit CY=0 xd7;unsigned char bdata flag;sbit flag0=flag0;sfr P1=0 x90;sbit P1_0=P10;sbit P1_1=P11;sbit P1_2=P12;sbit P1_3=P13;sbit P1_4=P14;sbit P1_5=P15;sbit P1_6=P16;sbit P1_7=P17;3 中断方式 单片机的中断为固定入口式中断,即一响应中断就转入固定入口地址执行中断服务程序。具体入口如下:编号 中断源 中断向量(汇编)C语言0 INT0 0003 interrupt 01T0 00
20、0BH interrupt 12INT1 0013H interrupt 23T1 001BH interrupt 34RI/TI 0023H interrupt 4 在这些单元中往往是一些跳转指令,跳到真正的中断服务程序,这是因为给每个中断源安排的空间只有8个单元。51系列单片机的5个中断源的中断服务入口地址之间相差8个单元。这8个存储单元用来存储中断服务程序一般来说是不够的。用户常在中断服务程序地址入口处放一条三字节的长转移指令。一般地,主程序从0030H单元以后开始存放。例如:ORG 0000HLJMP START ;转入主程序,START为主程序地址标号ORG 0003HLJMP IN
21、T0 ;转外中断中断服务程序ORG 000BHLJMP T0 ;转定时器T0中断服务程序ORG 0030HSTART:;主程序开始n例6.1.2 在图6.1.6中,P1.0P1.3接有4个开关,P1.4P1.7接有4个发光二极管,消抖电路用于产生中断请求信号,当消抖电路的开关来回拨动一次将产生一个下跳变信号,向CPU申请中断。要求:初时发光二极管全黑,每中断一次,P1.0P1.3所接的开关状态反映到发光二极管上,且要求开关合上时对应发光二极管亮。n解:汇编程序如下:n ORG 0000Hn AJMP MAINn ORG 0003H ;外部中断0入口n AJMP SER_INT0 ;转中断服务程
22、序n ORG 0100H ;主程序n MAIN:MOV P1,#0FH ;熄灭发光二极管且对开关输入端先输出1n SETB IT0 ;脉冲触发方式n SETB EX0 ;允许中断n SETB EA ;总中断允许n AJMP$;等待中断nSER_INT0:MOV P1,#0FH ;熄灭发光二极管且对开关输入端先输出1n MOV A,P1 ;输入开关状态n CPL A ;状态取反n ANL A,#0FH ;屏蔽A的高半字节n SWAP A ;A高低半字节交换n MOV P1,A ;开关状态输出n RETI ;中断返回每次单纯重置一次每次单纯重置一次4个开关的开、合状态,个开关的开、合状态,4个发光
23、二极个发光二极管维持原来的亮、灭状态,仅当来回拨动消抖开关后,产管维持原来的亮、灭状态,仅当来回拨动消抖开关后,产生了中断,发光二极管才反映新置的开关状态。生了中断,发光二极管才反映新置的开关状态。该例子的执行结果是:该例子的执行结果是:n#includenvoid int0()interrupt 0 /*中断函数中断函数*/nn P1=0 x0f;n/*熄灭发光二极管且对开关输入端先输出熄灭发光二极管且对开关输入端先输出1*/n P1=4;n/*读入开关状态,并左移四位,使开关反映在发光二极管上读入开关状态,并左移四位,使开关反映在发光二极管上*/n P1 P1;/*对对P1口内容取反口内容
24、取反*/nnmain()/*主函数主函数nn EA=1;/*开中断总开关开中断总开关*/n EX0=1;/*允许中断允许中断*/n IT0=1;/*负跳沿产生中断负跳沿产生中断*/n while(1)/*等待中断等待中断*/nC语言程序如下:语言程序如下:补2:通通过外部中断控制八盏灯循环点亮。解:解:通过P1口扩展八盏灯,在 INT1引脚(P3.3)接一个按钮开关到地,每按一下按钮就申请一次中断,点亮一盏灯,中断服务则是:依次点亮八盏灯中的一盏。采用边沿触发。硬件电路如下图所示。程序如下:程序如下:C源程序见源程序见int1.c ORG 0000H LJMP MAIN ORG 0013H ;
25、中断服务程序入口地址 LJMP IN11 MAIN:SETB EA ;开总中断允许“开关”SETB EX1 ;开分中断允许“开关”CLR PX1 ;低 优先级(也可不要此句)SETB IT1 ;边沿触发 MOV A,#01H ;给累加器A赋初值 SJMP$;原地等待中断申请 IN11:RL A ;左环移一次 MOV P1,A ;输出到P1口 RETI ;中断返回 END3 定时器计数器的控制 与定时器计数器有关的控制寄存器有:1 1定时器控制寄存器TCOND7D6D5D4D3D2D1D0TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0中断请求标志触发方式选择启动定时/计数器0 低
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 应用技术 重点 程序 高惠芳 ppt 课件
限制150内