微机原理及应用07C语言II2015_第1页
微机原理及应用07C语言II2015_第2页
微机原理及应用07C语言II2015_第3页
微机原理及应用07C语言II2015_第4页
微机原理及应用07C语言II2015_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 七 讲 51单片机C语言程序设计(教材4.44.5节)1微机原理及应用Principle and Applications of Micro-Computers教学目的: 函数和模块化程序设计要求: 掌握程序设计的模块化思路和分层设计思路;掌握如何使用高级语言访问MCU的片上资源难点: 掌握程序设计的模块化思路和分层设计思路 例例1, 循环程序设计循环程序设计 包含的主要指令包含的主要指令: DJNZ 包含的主要包含的主要C语言:语言: 例例2, 查表和子程序查表和子程序(包含输入和输出参数包含输入和输出参数)调用调用 包含的主要指令包含的主要指令: MOVC, LCALL 包含的主要包含

2、的主要C语言:语言: 例例3, BCD码运算程序码运算程序 包含的主要指令包含的主要指令: ADD, ADDC, DA 例例4, 搜索最小搜索最小(大大)数程序数程序(逻辑判断逻辑判断) 包含的主要指令包含的主要指令: JNC, XCH 例例5, I/O端口控制程序设计端口控制程序设计 (位操作位操作) 包含的主要指令包含的主要指令: JB, JNB, CPL内容2022-4-293汇编语言程序设计 示例1功能 计算n个无符号整型数之和要求写成子程序形式子程序的输入和输出参数输入: 数据个数存放在R4中, 数据的起始地址在R0中输出: 和存放在R4(高8位)和R5(低8位)中2022-4-29

3、4汇编语言程序设计 示例1的源码Sum: PUSH Acc ; 保存保存A的内容在堆栈区的内容在堆栈区PUSH B ; 保存保存B的内容在堆栈区的内容在堆栈区PUSH PSW ; 保存保存PSW的内容在堆栈区的内容在堆栈区MOV A, #00H ; 首先将和的低首先将和的低8位清零位清零MOV B, #00H ; 首先将和的高首先将和的高8位清零位清零CLR C ; 将进位位清零将进位位清零MOV R5, #00H ; R5寄存器清零寄存器清零Sum1:ADDC A, R0 ; 将一个字节的数据加到和的低字节中将一个字节的数据加到和的低字节中MOV R5, A ; 保存和的低字节到保存和的低字

4、节到R5中中CLR A ; 累加器累加器A清零清零ADDC A, B ; 将进位位加到和的高将进位位加到和的高8位中位中 MOV B, A ; 将和的高将和的高8位仍保存在位仍保存在B中中MOV A, R5 ; 将临时保存在将临时保存在R5中的和的低中的和的低8位位传送到传送到A中中INC R0 ; 数据缓冲区指针加数据缓冲区指针加1, 指向下一个字节指向下一个字节DJNZ R4, Sum1 ; 累加是否继续累加是否继续? ; 累加完成,和存放在累加完成,和存放在B(高高8位位)和和A(低低8位位)中中MOV R4, B ; 将和的高将和的高8位传送到位传送到R4中中POP PSW ; 从堆栈

5、区恢复从堆栈区恢复PSW的内容的内容POP B ; 从堆栈区恢复从堆栈区恢复B的内容的内容POP Acc ; 从堆栈区恢复从堆栈区恢复A的内容的内容RET#define xDataPt (unsighned char*)0 x00)#define pR4 = (char *)0 x03;unsigned int DataSum(void) unsigned int i,result; CY=0; for (i=0;i*pR4;i+) result+=*(xDataPt+i); *pR4 = result;2022-4-295汇编语言程序设计 课内练习1功能 将片外扩展的数据存储器中的20个无符

6、号整型数转移到片内数据存储器中要求写成子程序形式子程序的输入和输出参数输入: 保存原数据的起始地址为8000H输出: 片内数据存储器的起始地址为80H2022-4-296汇编语言程序设计 课内练练习1续续 MOV R6,#20;LOOP: MOV DPTR, #8000H; MOV R0,#80H; MOVX A, DPTR; MOV R0, A; INC DPTR INC R0 DJNZ R6, LOOP RET void DataMove(void) unsigned int i,result; char idata *DTo = (char *)0 x80; char xdata *DF

7、rom; *DFrom= (char *)0 x8000; for (i=0;i20;i+) *(DTo+i)=*(DFrom+i); 2022-4-297汇编语言程序设计 示例2功能 将一组将一组6个十六进制数转换成对应的个十六进制数转换成对应的ASCII串串(该字符串该字符串由由12个字符顺序组成个字符顺序组成)要求写成子程序形式写成子程序形式子程序的输入和输出参数子程序的输入和输出参数 输入输入: 保存原数据的起始地址为保存原数据的起始地址为30H 输出输出: 保存保存ASCII串的起始地址为串的起始地址为50Hn ASCII_Table:DB 0, 1, 2, 3, 4, 5, 6,

8、7DB 8, 9, A, B, C, D, E, F2022-4-298汇编语言程序设计 示例2的源码(1)用查表方法用查表方法, 编写一个子程序编写一个子程序, 实现单字节十六进制数到实现单字节十六进制数到ASCII字符的转换字符的转换ANL A, #0FHMOVC A, A+DPTRPOP DPHPOP DPLPOP PSWRETASCII_Table:DB 0, 1,2,3,4,5,6,7,DB 8,9,A,B,C,D,E,FTHex2ASCII: ; 见教材见教材p.71PUSH PSWPUSH DPLPUSH DPHMOV DPTR, #ASCII_TableMOV B, ASWAP

9、 AANL A, #0FHMOVC A, A+DPTRXCH A, B请问请问:输入参数是输入参数是?输出参数是输出参数是?2022-4-299汇编语言程序设计 示例2的源码(2)J 编写一个子程序编写一个子程序, 调用前一个子程序调用前一个子程序, 将将6个字节十六进制数转换成一个字符串个字节十六进制数转换成一个字符串INC R1MOV R1, AINC R1INC R0DJNZ R7, ToStrPOP BPOP AccRETToString:PUSH AccPUSH BMOV R0, #30HMOV R1, #50HMOV R7, #6ToStr:MOV A, R0LCALL THex2

10、ASCIIMOV R1, B2022-4-2910C程序设计 示例2的源码(2)J 编写一个子程序编写一个子程序, 调用前一个子程序调用前一个子程序, 将将6个字节十六进制数转换成一个字符串个字节十六进制数转换成一个字符串void main() unsigned int i,result; char idata *DTo = (char *) 0 x50; char idata *Dfrom= (char *) 0 x30; int i; for(i=0;14); Dest+; *Dest=ASCii(temp&0 x0F); 课内练习课内练习2:编写程序将编写程序将n个字节的个字节的十六进制

11、数要转换为一十六进制数要转换为一个字符串个字符串. (用示例用示例1的参数的参数)对应MOVC2022-4-2911汇编语言程序设计 示例3功能 计算3个字节型BCD码之和, 并表示成BCD码要求写成子程序形式子程序的输入和输出参数输入: 数据存放在R4, R5和R6中输出: 和存放在R2(高8位)和R3(低8位)中2022-4-2912汇编语言程序设计 示例3的源码BCDSum: PUSH AccPUSH PSWMOV R2, #00HMOV A, R4ADD A, R5DA AMOV R3, ACLR AADDC A, R2 mov R2,AMOV A, R3ADD A, R6DA AMO

12、V R3, A CLR AADDC A, R2DA AMOV R2, APOP PSWPOP AccRETR5R4+AC调整调整R3R2R6+ACR3调整调整R2C+R22022-4-2913汇编语言程序设计 课内练习3功能 将一个无符号整型十六进制数转换成BCD码要求写成子程序形式子程序的输入和输出参数输入: 原数据保存在A中输出: BCD码保存在R3(高字节)和R4(低字节)中2022-4-2914汇编语言程序设计 课内练习3续MOVB,#100DIVABMOVR3,A; save hundred bitMOVA,BMOVB,#10DIVABSWAP AORLA,BMOVR4,ARETvo

13、id Hex2BCD(char HEX,char BCD)BCD=(HEX/10*16)+(HEX%10);main() 2022-4-2915汇编语言程序设计 示例4功能 某系统的片外某系统的片外RAM从从0020H0030H地址单元存放着一批无地址单元存放着一批无符号整型数符号整型数, 请查找其中的最小数是多少请查找其中的最小数是多少? 位于哪个地址单元位于哪个地址单元?要求写成子程序形式写成子程序形式子程序的输入和输出参数子程序的输入和输出参数输入输入: 原数据存放在片外原数据存放在片外RAM的的00200030H中中输出输出: 最小数存放在最小数存放在A中中, 其地址放在其地址放在R2

14、(高高8位位)和和R3(低低8位位)中中2022-4-2916汇编语言程序设计 示例4的源码Sort:MOV R7, #16MOV DPTR, #0020HMOVX A, DPTRMOV B, AINC DPTRSort1:MOVX A, DPTRCLR CSUBB A, BJNC Sort_SkipMOVX A, DPTRXCH A, BMOVX DPTR, AMOV R3, DPLSort_Skip:INC DPTRDJNZ R7, Sort1RET 课内练习课内练习4:编写程序确定这一组数编写程序确定这一组数据的最大数及其存储单据的最大数及其存储单元地址元地址. 2022-4-2917汇

15、编语言程序设计 课内练习5功能 有16个字节的数据分别存放在2000H200FH单元,请编写程序统计其中有多少个数据是大于80H的,将统计结果保存在片内RAM的30H单元。要求写成子程序形式子程序的输入和输出参数输入:原数据存放在片外RAM的2000H200FH中输出:统计结果保存在片内RAM的30H单元2022-4-2918汇编语言程序设计 课内练习5续 MOVR4,#0MOVR2,#16MOVDPTR,#2000Hex1_loop:MOVXA,DPTRSUBB A,#80H ; JCex1_skipINCR4ex1_skip:INCDPTRDJNZR2,ex1_loopMOVA,R4MOV

16、30H,ARET内容 例例1, 循环程序设计循环程序设计 包含的主要指令包含的主要指令: DJNZ 包含的主要包含的主要C语言:语言: 例例2, 查表和子程序查表和子程序(包含输入和输出参数包含输入和输出参数)调用调用 包含的主要指令包含的主要指令: MOVC, LCALL 包含的主要包含的主要C语言:语言: 例例3, BCD码运算程序码运算程序 包含的主要指令包含的主要指令: ADD, ADDC, DA 例例4, 搜索最小搜索最小(大大)数程序数程序(逻辑判断逻辑判断) 包含的主要指令包含的主要指令: JNC, XCH 例例5, I/O端口控制程序设计端口控制程序设计 (位操作位操作) 包含

17、的主要指令包含的主要指令: JB, JNB, CPL2022-4-2920汇编语言程序设计 示例5功能 按图中电路按图中电路, 控制控制LED: 按下按下Key时时, LED常亮常亮; Key断开时断开时, LED亮亮0.1s, 灭灭0.9s要求写成主程序形式写成主程序形式P1.0+5V12MHzKeyP3.1XTAL1XTAL2按下KeyKey断开讨论实现思路讨论实现思路.2022-4-2921汇编语言程序设计 示例5的流程启动启动按按Key?YesNoLED亮亮,Flag=0OnOff=0, Cnt=00HFlag=1OnOff=0?YesNoCnt9?NoYesCnt=Cnt+1OnOf

18、f=1, Cnt=00HP1.0=0Cnt90?NoYesOnOff=0, Cnt=00HP1.0=1 AND Flag延时延时10ms 启动和初始化启动和初始化任务任务2(识别识别Key状态状态)任务任务3(控制控制LED状态状态)任务任务1(延时延时10ms)2022-4-2922汇编语言程序设计 示例5的源码Flag BIT 00HOnOff BIT 01HCnt DATA 30HORG 0000HLJMP main_entry ; 无中断程序无中断程序ORG 0100Hmain_entry:CLR OnOffMOV Cnt, #00Hmain_loop:LCALL Task1LCALL Task2LCALL Task3LJMP main_loopORG 0200HTask1: ; 延时延时10msMOV R7, #97T11: MOV R6, #50T12: DJNZ R6, T12DJNZ R7, T11RETTask2: ; 识别识别Key状态状态JNB P3.1,T2Skip;按下按下SETB FlagRETT2Skip: CLR P1.0CLR FlagRETTask3: ; 控制控制LED状态状态INC CNTJNB OnOff, T3SkipMOV P1.0, FlagMOV A, #90C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论