1、华中科技大学单片机实验二报告单片机实验报告实验名称 分支程序设计 指导教师 刘 冬 牛 专业班级 学 号 联系方式 任务要求熟练掌握KeilC环境下汇编语言程序的调试方法,加深对汇编语言指令、机器码、寻址方式等基本内容的理解,掌握分支程序和简单程序的设计与调试方法,了解并行 10 口的使用。1.设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果 Y也存于外部RAM 元,请按要求编写程序。X2 当 X 40Y X/2 当 20 X 40X 当 X 202利用51系列单片机设计一个 24小时制电子时钟,电子时钟的时、分、秒数值分别通 过PO、P1、P2端口输出(以压缩 BCD码的形式
2、)。为低电平时开始计时,为高电平时停止 计时。提高部分(选做):a.实现4位十进制加、减1计数,千位、百位由 P1 口输出;十位、个位由 P2 口输出。 利用状态选择加、减计数方式。b.利用P3 口低四位状态控制开始和停止计数,控制方式自定。2.设计思路1分段函数设计对于第一个任务,根据变量 X的值的不同进行相应的计算。所以我们首先要判断 X的值属于那个范围。我们可利用比较转移指令 CJNE来判断X是否等于临界值20,40,若不等,再根据执行CJNE指令后的进位位 CY的值来判断X与临界值的的大小关系,如: CY=0则X大于临界值,CY=1则X小于临界值;然后根据 X的值所在的区间进行相应的计
3、算。应该注 意的是,除法计算中可能产生余数,商和余数应该分开存储,若乘方运算结果大于 255,高八位与低八位应分开存储2.24进制时钟本程序须可以构建两部分循环。 首先构建一个三重循环实现“一秒延时”,循环体利用NOP指令(单字节指令,1卩s)经多次循环达到延时一秒的效果。再利用已经构建好的“一 秒延时”部分,设计计时系统的三重循环,秒( 0-59)、分(0-59)、时(0-23)。秒和分计60次,小时计24次,但,是从0开始计,所以在分、秒达到 59,小时达到23时,下一次 应该为零。程序运行时修改的值可以实现暂停和继续的功能3.资源分配1.分段函数根据题目的条件,首先,设该 8位无符号数为
4、30H,把片外地址4000H分配给它,把片外地址4001H和4002H分配给经分段函数计算得到的结果 Y。按位取反计算结果存于4001H单元,而除法计算结果的商与余数和乘方计算中结果的高、低八位分开存储于 4001H-4002H单元。用寄存器 A,B来存放在乘除运算中所得的中间结果。2.二十四进制时钟工作寄存器R0 R1、R2分别用于秒、分、时循环次数的设定, R3 R4分别用于分与时的循环计数,R5-R7用于“一秒延时”中三重循环的循环次数设定。秒、分、时数值分别由 P2、P1、P0 端口输出。4.流程图c仔11.分段函数ORG 0000HLJMP MAINORG 0100H;将8位无符号数
5、赋给 A;定义数据指针;将X存于片外RAMMAIN: MOV A, #29HMOV DPTR, #4000HMOVX DPTR, AKIND1:CJNE A, #14H, KIND2;将A与14H比较,若不等于14H,跳转至KIND2OUT1: CPL A;对A中内容取反;将进位位清零CLR CMOV DPTR, #4001H;定义数据指针MOVX DPTR, A;将计算结果存于片外地址 4001HSJMP DONEKIND2:JNC KIND3;判断进位位CY是否为0,若为0,跳转至KIND3SJMP OUT1;否则跳转至 OUT1KIND3:CLR C;将进位位清零CJNE A,#28H,
6、 KIND4;将A中内容与28H比较,若不等于 28H,跳转至KIND4OUT2: MOV B,A;将A中内容赋给BMUL AB;计算X的平方,将结果高八位存于 B,低八位存于 AMOV DPTR, #4001H; 定义数据指针MOVX DPTR,A;将结果低八位存于片外地址 4001HINC DPTR; 数据指针加一MOV A,B;将 B 中内容赋给 AMOVX DPTR,A;将结果高八位存于片外地址 4002HSJMP DONEKIND4:JNC OUT2;判断进位位是否为 0,若为 0,跳转至 OUT2SJMP OUT3;否则跳转至 OUT3OUT3: MOV B,#02HDIV AB;
7、计算X/2,将商存于A,余数存于BMOV DPTR,#4001H; 定义数据指针MOVX DPTR,A;将商存于片外地址 4001HINC DPTR; 数据指针加 1MOV A,BMOVX DPTR,A;将余数存于片外地址 4002HSJMP DONEDONE: SJMP $END2. 24 小时时钟ORG 0000HLJMP MAINORG 0100HMAIN:MOV R0,#00HMOV P0,#00H ;时钟位清零MOV P1,#00H ;分钟位清零MOV P2,#00H ;秒钟位清零START:JB ,START ;为低电平开始计数,高电平停止计数MOV R2,P2 ;P2 的值存入
8、R2CJNE R2,#60H,DEL ;秒钟达到 60继续,不足 60 跳转MOV P2,#00H ;秒钟清零MOV A,P1ADD A,#01H ;分钟位加 1DA A ;分钟位改为 BCD 码MOV P1,AMOV R1,P1 ;P1 的值存入寄存器 R1CJNE R1,#60H,DE;分钟达到60继续,不足 60跳转MOV P1,#00H ;分钟清零MOV A,R0ADD A,#01H ;时钟位加 1DA A ;时钟位改为BCD码MOV R0,AMOV P0,ACJNE R0,#24H,DE;时钟达到24继续,不足 24跳转MOV P0,#00H ;时钟位清零MOV R0,#00HDEL
9、:LOOP1:LOOP2:MOV R7,#24 ;延时程序MOV R6,#61MOV R5,#170LOOP3:NOPNOPDJNZ R5,LOOP3DJNZ R6,LOOP2DJNZ R7,LOOP1MOV A,P2ADD A,#01H ;秒钟位加 1DA AMOV P2,ASJMP STARTEND六 . 程序测试方法与结果、软件性能分析1.分段函数改变X的值,分别在不同的X值时运行程序,结果如下截图(1) X=29HPt ojeet Jar ksp ace K* gi sMrViLlltrOOkOO:“” rlOmOOr2OkOO3OkODr4OkOO5OkOOr6OmOOrT0x00-
10、Sys呂0s06bOhOBsOnOTp_moOkOTdptrOk4002FC $cm.,.stales62sec0.00.田-1D呼 004Tg| K (Q)*0 |零X-gxQgwi:WggODogQDDQgQQQQQQQQQOQgoaoQD皿go00QQgQQQO口暫0Q00 QJ4 6gg饲鸽00OQOQOQOQ0000OQ9000COQOQOOQoa0000OQ00000000QQ00CDOQ000X; 0x0067 ;DO3C03OD0000阴0000CODO00oaaoODO000oo000000DOCO3000rxm萱 QCMdsDO0000ooreGO00GO0000CODOD
11、O00a aao0000CIO0000000000COQGaoaertnnifti M*、j-A AHi AKRmA眄H%j*% m HRa inK耳i*ihfKsKn a.h Hn#1 匚 沪 Memory =4如*注|初训D02XOk 口匚耳gDO00口。goggoDOaO3OD03ooCD30qD3QOOUDO00口口3000gooo30DO口亡: 0x004059:0 5cono50CIO0002DO0000A0-:30OC1:53000:&0no0003 300DCK9OaDDO601DQCQ口。g0000QG00ODODoc90oaggOD0oaaoDQCQ00asQO00QGKaQaDOiOWiaaDQOQDO00gj000QDao00JQ皿QO口 DQmaDDKODDQQQODOOQDO00asDOQoan mmn Fknnrunnrmi rtmrtinrn nn nnn-fcjnirs nfiL、in nJTi i1rmc niTfcmnrin nMpnOfV* A Mlw 章吟*wv*(2)X=21HRm理istar| aly | A-Re养rOOjcOOrlQxODr2OkOOr3OkEDr40x00r5DMrG0x00 S OkCO-SysjOkOI.b0x01OjcOT汕“邓血0x0 Tdptr0x4002PC $C:OKx.690.00.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1