版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七讲51单片机C语言程序设计(教材4.4~4.5节)1微机原理及应用
PrincipleandApplicationsofMicro-Computers教学目的:函数和模块化程序设计要求: 掌握程序设计的模块化思路和分层设计思路;掌握如何使用高级语言访问MCU的片上资源难点: 掌握程序设计的模块化思路和分层设计思路例1,循环程序设计包含的主要指令:DJNZ包含的主要C语言:例2,查表和子程序(包含输入和输出参数)调用包含的主要指令:MOVC,LCALL包含的主要C语言:例3,BCD码运算程序包含的主要指令:ADD,ADDC,DA例4,搜索最小(大)数程序(逻辑判断)包含的主要指令:JNC,XCH例5,I/O端口控制程序设计(位操作)包含的主要指令:JB,JNB,CPL内容2023/2/33汇编语言程序设计示例1功能
计算n个无符号整型数之和要求写成子程序形式子程序的输入和输出参数输入:数据个数存放在R4中,数据的起始地址在R0中输出:和存放在R4(高8位)和R5(低8位)中2023/2/34汇编语言程序设计示例1的源码Sum:
PUSHAcc
;保存A的内容在堆栈区
PUSHB
;保存B的内容在堆栈区
PUSHPSW
;保存PSW的内容在堆栈区 MOVA,#00H;首先将和的低8位清零 MOVB,#00H;首先将和的高8位清零 CLRC;将进位位清零 MOVR5,#00H;R5寄存器清零Sum1: ADDCA,@R0
;将一个字节的数据加到和的低字节中 MOVR5,A;保存和的低字节到R5中 CLRA;累加器A清零 ADDCA,B;将进位位加到和的高8位中MOVB,A;将和的高8位仍保存在B中 MOVA,R5;将临时保存在R5中的和的低8位传送到A中 INCR0;数据缓冲区指针加1,指向下一个字节
DJNZR4,Sum1
;累加是否继续?
;累加完成,和存放在B(高8位)和A(低8位)中 MOVR4,B;将和的高8位传送到R4中
POPPSW
;从堆栈区恢复PSW的内容
POPB
;从堆栈区恢复B的内容
POPAcc
;从堆栈区恢复A的内容
RET#definexDataPt((unsighnedchar*)0x00 )#definepR4=(char*)0x03;unsignedintDataSum(void){unsignedinti,result;CY=0;for(i=0;i<*pR4;i++)result+=*(xDataPt+i);*pR4=result;}2023/2/35汇编语言程序设计课内练习1功能
将片外扩展的数据存储器中的20个无符号整型数转移到片内数据存储器中要求写成子程序形式子程序的输入和输出参数输入:保存原数据的起始地址为8000H输出:片内数据存储器的起始地址为80H2023/2/36汇编语言程序设计课内练习1续MOVR6,#20;LOOP:MOVDPTR,#8000H;MOVR0,#80H;MOVXA,@DPTR;MOV@R0,A;INCDPTRINCR0DJNZR6,LOOPRET
voidDataMove(void){unsignedinti,result;charidata*DTo=(char*)0x80;charxdata*DFrom;*DFrom=(char*)0x8000;for(i=0;i<20;i++)*(DTo+i)=*(DFrom+i);}2023/2/37汇编语言程序设计示例2功能
将一组6个十六进制数转换成对应的ASCII串(该字符串由12个字符顺序组成)要求写成子程序形式子程序的输入和输出参数输入:保存原数据的起始地址为30H输出:保存ASCII串的起始地址为50HASCII_Table: DB‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’ DB‘8’,‘9’,‘A’,‘B’,‘C’,‘D’,‘E’,‘F’2023/2/38汇编语言程序设计示例2的源码(1)用查表方法,编写一个子程序,实现单字节十六进制数到ASCII字符的转换
ANLA,#0FH MOVCA,@A+DPTR POPDPH POPDPL POPPSW RETASCII_Table:DB‘0’,‘1’,’2’,’3’,’4’,’5’,’6’,’7’,DB‘8’,’9’,’A’,’B’,’C’,’D’,’E’,’F’THex2ASCII:;见教材p.71 PUSHPSW PUSHDPL PUSHDPH MOVDPTR,#ASCII_Table MOVB,A SWAPA ANLA,#0FH MOVCA,@A+DPTR XCHA,B请问:输入参数是?输出参数是?2023/2/39汇编语言程序设计示例2的源码(2)编写一个子程序,调用前一个子程序,将6个字节十六进制数转换成一个字符串 INCR1 MOV@R1,A INCR1 INCR0
DJNZR7,ToStr POPB POPAcc
RETToString: PUSHAcc PUSHB MOVR0,#30H MOVR1,#50H MOVR7,#6ToStr: MOVA,@R0 LCALLTHex2ASCII
MOV@R1,B2023/2/310C程序设计示例2的源码(2)编写一个子程序,调用前一个子程序,将6个字节十六进制数转换成一个字符串voidmain(){
unsignedinti,result;
charidata*DTo=(char*)0x50;charidata*Dfrom=(char*)0x30;inti;
for(i=0;1<6,i++){Hex2Str(Dfrom,DTo);Dfrom++;DTo++;}}
codeunsignedcharASCii[]={’0’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’A’,’B’,’C’,’D’,’E’,’F’}voidHex2Str(char*Src,char*Dest)
{chartemp=*Src;*Dest=ASCii[(temp>>4)];Dest++;*Dest=ASCii[(temp&0x0F)];
}
课内练习2:编写程序将n个字节的十六进制数要转换为一个字符串.(用示例1的参数)对应MOVC2023/2/311汇编语言程序设计示例3功能
计算3个字节型BCD码之和,并表示成BCD码要求写成子程序形式子程序的输入和输出参数输入:数据存放在R4,R5和R6中输出:和存放在R2(高8位)和R3(低8位)中2023/2/312汇编语言程序设计示例3的源码BCDSum:
PUSHAcc
PUSHPSW MOV R2,#00H MOVA,R4 ADDA,R5 DAA MOVR3,A CLRA ADDCA,R2movR2,A MOVA,R3 ADDA,R6 DAA MOVR3,A CLRA ADDCA,R2 DAA MOV R2,A
POPPSW
POPAcc
RETR5R4+AC调整R3R2R6+ACR3调整R2C+R22023/2/313汇编语言程序设计课内练习3功能
将一个无符号整型十六进制数转换成BCD码要求写成子程序形式子程序的输入和输出参数输入:原数据保存在A中输出:BCD码保存在R3(高字节)和R4(低字节)中2023/2/314汇编语言程序设计课内练习3续MOV
B,#100 DIV
AB MOV
R3,A ;savehundredbit MOV
A,B MOV
B,#10 DIV
AB SWAP
A ORL
A,B MOV
R4,A RETvoidHex2BCD(charHEX,charBCD){BCD=(HEX/10*16)+(HEX%10);}main(){……}2023/2/315汇编语言程序设计示例4功能
某系统的片外RAM从0020H~0030H地址单元存放着一批无符号整型数,请查找其中的最小数是多少?位于哪个地址单元?要求写成子程序形式子程序的输入和输出参数输入:原数据存放在片外RAM的0020~0030H中输出:最小数存放在A中,其地址放在R2(高8位)和R3(低8位)中2023/2/316汇编语言程序设计示例4的源码Sort: MOVR7,#16 MOVDPTR,#0020H MOVXA,@DPTR MOVB,A INCDPTRSort1: MOVXA,@DPTR CLRC SUBBA,B JNCSort_Skip MOVXA,@DPTR XCHA,B MOVX@DPTR,A MOVR3,DPLSort_Skip: INCDPTR DJNZR7,Sort1 RET
课内练习4:编写程序确定这一组数据的最大数及其存储单元地址.2023/2/317汇编语言程序设计课内练习5功能
有16个字节的数据分别存放在2000H~200FH单元,请编写程序统计其中有多少个数据是大于80H的,将统计结果保存在片内RAM的30H单元。要求写成子程序形式子程序的输入和输出参数输入:原数据存放在片外RAM的2000H~200FH中输出:统计结果保存在片内RAM的30H单元2023/2/318汇编语言程序设计课内练习5续
MOV R4,#0 MOV R2,#16 MOV DPTR,#2000Hex1_loop: MOVX
A,@DPTR SUBB A,#80H ; JC ex1_skip INC R4ex1_skip: INC DPTR DJNZ
R2,ex1_loop MOV A,R4 MOV 30H,A RET内容例1,循环程序设计包含的主要指令:DJNZ包含的主要C语言:例2,查表和子程序(包含输入和输出参数)调用包含的主要指令:MOVC,LCALL包含的主要C语言:例3,BCD码运算程序包含的主要指令:ADD,ADDC,DA例4,搜索最小(大)数程序(逻辑判断)包含的主要指令:JNC,XCH例5,I/O端口控制程序设计(位操作)包含的主要指令:JB,JNB,CPL2023/2/320汇编语言程序设计示例5功能
按图中电路,控制LED:
按下Key时,LED常亮; Key断开时,LED亮0.1s,灭0.9s要求写成主程序形式P1.0+5V12MHzKeyP3.1XTAL1XTAL2按下KeyKey断开讨论实现思路.2023/2/321汇编语言程序设计示例5的流程启动按Key?YesNoLED亮,Flag=‘0’OnOff=‘0’,Cnt=00HFlag=‘1’OnOff=‘0’?YesNoCnt>9?NoYesCnt=Cnt+1OnOff=‘1’,Cnt=00HP1.0=‘0’Cnt>90?NoYesOnOff=‘0’,Cnt=00HP1.0=‘1’ANDFlag延时10ms启动和初始化任务2(识别Key状态)任务3(控制LED状态)任务1(延时10ms)2023/2/322汇编语言程序设计示例5的源码 FlagBIT00H OnOffBIT01H CntDATA30HORG0000HLJMPmain_entry;无中断程序ORG0100Hmain_entry: CLROnOff MOVCnt,#00Hmain_loop: LCALLTask1 LCALLTask2 LCALLTask3 LJMPmain_loopORG0200HTask1:;延时10ms MOVR7,#97T11:MOVR6,#50T12:DJNZR6,T12 DJNZR7,T11 RETTask2:;识别Key状态 JNBP3.1,T2Skip;按下
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 美容院美容顾问服务态度与技能KPI考核表
- 关注心理健康拥抱阳光心态小学六年级主题班会课件
- 统编版六年级语文上册第5课《狼牙山五壮士》学习任务单
- 销售部门年度业绩绩效考核表
- 知识库系统建设与内容管理规范手册
- 传媒行业视频剪辑师绩效考评表
- 通讯行业技术支持团队问题解决能力与响应速度绩效考评表
- 抵制交通违规行为护航安全成长小学交通安全班会课件
- 物流仓储管理专员货物储存与出库效率绩效评定表
- 安全教育日:学会自我保护的小学主题班会课件
- 成都未来科技城发展服务局2026年社会招聘笔试题库附参考答案详解【模拟题】
- 2026年中心血站采血医技岗医疗卫生事业招聘考试笔试试题(含答案)
- 烧结多孔砖生产施工方案及技术措施
- 山东能源定向委培考试题
- 2025广东省风力发电有限公司山西分公司招聘7人笔试历年难易错考点试卷带答案解析
- 无水乙醇在脏器囊肿硬化治疗中合理性应用的专家共识
- 癫痫患者发作急救流程及日常护理建议
- 银行-从年报透析上市银行资产质量
- 山西省长治市2026年重点学校小升初入学分班考试英语考试试题及答案
- 2025年全国青少年信息素养大赛C++算法创意实践挑战赛(小学组-复赛)真题(含答案)
- 上海国际货币经纪有限责任公司招聘笔试题库2026
评论
0/150
提交评论