早教吧 育儿知识 作业答案 考试题库 百科 知识分享

单片机中把两个16位无符号单字节数求和相加,设计程序?例1利用定时器输出周期为2ms的方波,设单片机晶振频率为6MHz.选用定时器/计数器T0作定时器,输出为P1.0引脚,2ms的方波可由间隔1

题目详情
单片机中把两个16位无符号单字节数求和相加,设计程序?
例 1 利用定时器输出周期为 2 ms的方波,设单片机晶振频率为 6 MHz.
选用定时器 /计数器T0 作定时器,输出为P1.0 引脚,2 ms 的方波可由间隔 1 ms的高低
平相间而成,因而只要每隔 1 ms对 P1.0 取反一次即可得到这个方波.
定时 1 ms的初值:
因为 机器周期=12÷6 MHz= 2 μs
所以 1 ms内T0 需要计数N次:
N= 1 ms÷2 μs = 500
由此可知:使用方式 0 的 13 位计数器即可,T0的初值X为
X=M-N=8 192-500=7 692=1E0CH
但是,因为 13 位计数器中,低8位TL0只使用了5 位,其余码均计入高8 位TH0的
初值,则T0的初值调整为
TH0=0F0H,TL0=0CH
TMOD初始化:TMOD=00000000B=00H
(GATE=0,C/T=0,M1=0,M0=0)
TCON初始化:启动TR0=1
IE初始化:开放中断EA=1,定时器T0 中断允许ET0=1
程序清单如下:
ORG 0000H
AJMP START; 复位入口
ORG 000BH
AJMP TOINT ; T0中断入口
ORG 0030H
START:MOV SP,#60H; 初始化程序
MOV TH0,#0F0H ; T0赋初值
MOV TL0,#0CH
MOV TMOD,#00H
SETB TR0 ; 启动T0
SETB ET0 ; 开T0中断
SETB EA ; 开总允许中断
MAIN:AJMP MAIN ; 主程序
TOINT:CPL P1.0
MOV TL0,#0CH
MOV TH0,#0F0H
RET
如果把6MHZ改成12MHZ程序应该怎么改?
两个无符号双字节数相加.
设被加数存放于内部RAM的40H(高位字节),41H(低位字节),加数存放于50H(高位字节),51H(低位字节),和数存入 40H和41H单元中.
START:CLR C ; 将Cy清零
MOV R0,#41H ; 将被加数地址送数据指针R0
MOV R1,#51H ; 将加数地址送数据指针R1
AD1:MOV A,@R0 ; 被加数低字节的内容送入A
ADD A,@R1 ; 两个低字节相加
MOV @R0,A ; 低字节的和存入被加数低字节中
DEC R0 ; 指向被加数高位字节
DEC R1 ; 指向加数高位字节
MOV A,@R0 ; 被加数高位字节送入A
ADDC A,@R1 ; 两个高位字节带Cy相加
MOV @R0,A ;高位字节的和送被加数高位字节
RET
如果把题目改成把两个16位无符号单字节数求和相加,程序怎么变化?
▼优质解答
答案和解析
如果把6MHZ改成12MHZ程序应该怎么改?
可以使用方式1.
X = M-N = 65 536 - 1 000 = 64 536 = FC 18H
需要修改的指令为如下三条.
MOV TH0,#0FCH ; T0赋初值
MOV TL0,#18H
MOV TMOD,#01H
如果把题目改成把两个16位无符号单字节数求和相加,程序怎么变化?
把:
ADDC A,@R1 ; 两个高位字节带Cy相加
改为:
ADD A,@R1 ; 两个高位字节带Cy相加
即可.