单片机补充作业

发布 2022-09-09 14:14:28 阅读 4942

5-40 以中断方式,用汇编语言编写定时器t0方式0,1,2下,定时1ms的程序。设系统focs = 12mhz。

解1:方式0

确定装入t0的常数。机器周期为:

设所需初值为x,则。

1c18h = 1 1100 0001 1000b

根据13位定时器的特性,th0放x的高8位,tl0放低5位,我们将x值重排如下:x = 1110 0000 1 1000,即得本任务的时间常数为:th0 = e0h,tl0 = 18h。

org 0000h

ajmp main

org 000bh

ljmp time0int

org 0050h

main: mov sp,#60h

mov tmod,#00h

mov tl0,#18h

mov th0,#0e0h

setb et0 ;允许t0中断。

setb ea ;开放总中断。

setb tr0 ;启动t1定时。

sjmp $

time0int: clr tr0禁止t0

clr et0

reti中断返回。

end org 0000h

ajmp main

org 000bh

ljmp time0int

org 0050h

main: mov sp,#60h

mov tmod,#01h

mov tl0,#18h

mov th0,#0f0h

setb et0 ;允许t0中断。

setb ea ;开放总中断

setb tr0 ;启动t1定时。

sjmp $

time0int: clr tr0 ;禁止t0

clr et0

reti中断返回。

end 解3:方式2

确定装入t0的常数。计数器每机器周期计数值加1,机器周期为:

方式2为8位常数自动重装,每次溢出最大值为256μs,为编程方便,又减少中断次数,采用4次250μs的方法实现本任务。其时间常数为:th0 = 06h,tl0 =06h。

org 0000h

ajmp main

org 000bh

ljmp time0int

org 0050h

main: mov sp,#60h

mov r7,#

mov tmod,#02h

mov tl0,#06h

mov th0,#06h

setb et0 ;允许t0中断。

setb ea ;开放总中断。

setb tr0 ;启动t1定时。

sjmp $

time0int: djnz r7,return

clr tr0 ;禁止t0

clr et0

return: reti中断返回。

end 5-41 以中断方式,用汇编语言编写定时器t1方式0,1,2下,计数的程序。设计数终值为n,说明在计数值不溢出的情况下,每种方式下n的最大值是多少。

解1:方式0

13位计数初值(8192-计数值)高8位为nh,低8位为nl

org 0000h

ajmp main

org 001bh

ljmp time1int

org 0050h

main: mov sp,#60h

setb f0 ;f0=1继续,f0=0停止计数。

mov tmod,#40h

mov tl1,#nhh

mov th1,#nlh

setb et1允许t1中断。

setb ea ;开放总中断。

setb tr1 ;启动t1定时。

sjmp $

time1int:jnb f0,stopt1

mov tl1,#nhh

mov th1,#nlh

sjmp return

stopt1:clr f0

clr tr1 ;禁止t1

clr et1

return:reti中断返回。

end 解2:方式1

16位计数初值(65536-计数值)高8位为nh,低8位为nl。

org 0000h

ajmp main

org 001bh

ljmp time1int

org 0050h

main: mov sp,#60h

setb f0 ;f0=1继续,f0=0停止计数。

mov tmod,#50h

mov tl1,#00h

mov th1,#00h

setb et1 ;允许t0中断。

setb ea ;开放总中断。

setb tr1 ;启动t1定时。

sjmp $

time1int: jnb f0,stopt1

mov tl1,#nhh

mov th1,#nlh

sjmp return

stopt1: clr f0

clr tr1 ;禁止t1

clr et1

return:reti中断返回。

end 解3:方式2为8位计数(少用),计数值在tl1中设计数目标为nl。

nl equ yyh

org 0000h

ajmp main

org 001bh

ljmp time1int

org 0050h

main: mov sp,#60h

setb f0 ;f0=1继续,f0=0停止计数。

mov tmod,#60h

mov tl1,#nlh

mov th1,#nlh

setb et1 ;允许t0中断。

setb ea ;开放总中断。

setb tr1 ;启动t1定时。

sjmp $

time1int: jnb f0,stopt1

sjmp return

stopt1: clr f0

clr tr1 ;禁止t1

clr et1

return: reti中断返回。

end方式的最大计数值分别为和256。

5-42设中断请求源已接好,外部中断0用电平触发方式,外部中断1用下降沿触发方式,用汇编语言编写它们响应并处理中断的程序。处理内容可用nop指令表示。注意比较两者的异、同。

解1:外部中断0用低电平触发方式。

org 0000h

ajmp main

org 0003h

ljmp int0int

org 0050h

main: mov sp,#60h

setb ex0 ;允许外部中断0中断。

clr it0

setb ea ;开放总中断。

sjmp $

int0int: nop

reti ;中断返回。

end 解2:外部中断1用下降沿触发方式。

org 0000h

ajmp main

org 0013h

ljmp int0int

org 0050h

main: mov sp,#60h

setb ex1 ;允许外部中断1中断。

setb it1

setb ea ;开放总中断。

sjmpint0int: nop

reti中断返回。

end两者对称,只需0,1对调,清it0,置it1。

5-43要求发送用查询方式,接收用中断方式。用汇编语言编写在方式1,2,3下,51机串口发送和接收一帧数据的程序。设发送和接收的数据都在r5中。

注意:设系统focs = 11.0592mhz,在波特率可变方式下,波特率取9600(baud),一律不用pcon加速。

解1:方式1发送。

不用pcon加速时,定时器t1用方式2,查表5-6或计算,t1常数为fdh

org 0000h

ajmp main

org 0050h

main: mov sp,#60h

mov scon,#40h

mov pcon,#00h

mov tmod,#20h

mov tl1,#0fdh

mov th1,#0fdh

setb tr1 ;启动波特率。

mov sbuf,r5

wait: jbc ti,stop

sjmp wait

stop: sjmp动态停机end

方式1接收程序为。

org 0000h

ajmp main

org 0023h

ljmp serint

org 0050h

main: mov sp,#60h

mov scon,#50h

mov pcon,#00h

mov tmod,#20h

mov tl1,#0fdh

mov th1,#0fdh

setb es ;允许串口中断。

setb ea ;开放总中断。

setb tr1 ;启动波特率。

sjmp $

serint:clr ri

mov r5,sbuf

reti中断返回。

end 解2:方式2发送不用计算定时器t1常数。

org 0000h

ajmp main

org 0050h

main: mov sp,#60h

mov scon,#80h ;sm2=0

mov pcon,#00h

mov sbuf,r5

wait: jbc ti,stop

sjmp wait

stop: sjmp动态停机。

end 方式2接收程序为。

org 0000h

ajmp main

org 0023h

ljmp serint

org 0050h

main: mov sp,#60h

mov scon,#90h ;sm2=0

mov pcon,#00h

setb es允许串口中断。

setb ea开放总中断。

sjmp $

serint:clr ri

mov r5,sbuf

reti中断返回。

end 解3:方式3发送:不用pcon加速时,定时器t1用方式2,查表5-6或计算,t1常数为fdh

org 0000h

ajmp main

org 0050h

main: mov sp,#60h

mov scon,#0c0h;sm2=0

mov pcon,#00h

mov tmod,#20h

mov tl1,#0fdh

mov th1,#0fdh

setb tr1启动波特率。

mov sbuf,r5

wait: jbc ti,stop

sjmp wait

stop: sjmp动态停机。

end 方式3接收程序为。

org 0000h

ajmp main

org 0023h

ljmp serint

org 0050h

main: mov sp,#60h

mov scon,#0d0h;sm2=0

mov pcon,#00h

mov tmod,#20h

mov tl1,#0fdh

mov th1,#0fdh

setb es ;允许串口中断。

setb ea ;开放总中断。

setb tr1 ;启动波特率。

sjmp $

serint:clr ri

mov r5,sbuf

reti中断返回。end

单片机作业

单片机测试一。第一部分选择题。一 单项选择题在每小题列出的四个备选项中只有一个是符合题目要求的,请将其 填写在题前的括号内。错选 多选或未选均无分。1.下列关于单片机说法错误的是。单片机的cpu能处理8位二进制数据或 以及布尔运算。b.8051总共有256个ram单元,内部数据存储器为前128单元。...

单片机作业

单片机原理及应用 作业。1 叫原码 反码和补码?答 正数的反码和补码都是和原码相同。负数。在计算机中,负数以其正值的补码形式表达。什么叫补码呢?这得从原码,反码说起。原码 一个整数,按照绝对值大小转换成的二进制数,称为原码。比如 是5的原码。反码 将二进制数按位取反,所得的新二进制数称为原二进制数的...

单片机作业

3 2访问外部数据存储器和程序存储器可以用哪些指令来实现?举例说明。答 访问外部数据存储器可以用ramx指令来实现。例如 movx a,ri 寄存器ri指向的片外ram单元中的内容送到累加器a中。访问程序存储器可以用ramc指令来实现。例如 movc a,a dptr rom中 地址单元中的内容送到...