单片机实验6

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二、实验步骤
1、实验采用在线仿真 1)使用USB线和串口线,将XL1000综合仿真仪与微型计算机连接起来; 2) 在XL1000综合仿真仪上,将JP13和JP14两个232/USB通信选择方式端口的跳线帽跳至232的方式 相连; 3)将JP17的开关压下,选择仿真模式;
4)当你的程序编写完成,并将*.asm添加到工程中后,进行仿真前,对目标1的属性进行修改;
(GATE=0, C/T=1, M0M1=10)
TMOD=01100000B=60H
计数值:X= M-36 =256-36=220=?H
(2)计36个产品考虑T1工作在方式2时, 溢出产生中断, 在中断服务程序中, 使P1.0闪烁。
参考程序:
ORG 0000H AJMP START ORG 001BH CLP P1.0 RETI ORG 0100H START: MOV SP, #5FH MOV TMOD, #60H MOV TH1, #?H ;置初值 MOV TL1, #?H SETB TR1 ; 启动T1 SETB ET1 ; 开T1 SETB EA ; SJMP $
LOOP: AJMP LOOP
TIME0: PUSH ACC
PUSH PSW
;将PSW和ACC推入堆栈保护
MOV TH0,#4CH
MOV TL0,#00H
;重置定时常数
INC 30H来自百度文库
MOV A,30H
CJNE A,#10,T_END ;30H单元中的值到10了吗?
MOV 30H,#00H
;清计数器
END
4、思考题:
用定时计数器输出周期为1S的连续方波,并使LED灯闪烁(采用T0与T1级连)。
(1)用1PIN线将单片机的P1.7与P3.5(定时/计数器T1外部输入端)相连,P1.6与某个LED灯连接。形成T0 和T1的级连。
(2)T0工作在方式2、定时方式,在P1.7输出0.4ms的连续方波 ;T1工作在方式1,计数方式,在P1.6输出1S 的方波,使LED灯闪烁。
end
;输出到P1
;10次到了么?没有继续否则完成 ;恢复现场
;延时200MS
2、用定时中断实现流水 P0和P2 各接8个LED灯,实现流水。
ORG 0000H
AJMP MAIN
ORG 000BH
;定时器0的中断向量地址
AJMP TIME0
ORG 0080H
MAIN: MOV P0,#0FFH ;关所有灯
9)全部确定后,对程序进行编译,并生成相应的HEX文件后,进行调试(红色的D),
;如出现错误报告,要求连上仿真
仪时,请检查有无连接USB线和串
口线,并按下仿真仪上的复位键;
10)进入调试窗口,连接上相关的连接线,点击”全速运行”,
即可观查仿真结果;
11)退出仿真时,按下仿真仪上的复位键就会自动退到编辑模式下,修改完毕程序并编译后,再按下”调试”即可进 入仿真模式;
org
0030h
main:
mov
tmod,#01h
;设置定时器工作方式寄存器。
mov
th0,# (65536-50000)/256 ;3CH
mov
tl0,# (65536-50000)%256
; B0H
mov
mov
mov
setb
ajmp
int_timer0:
mov
mov
djnz
mov
djnz
mov
(3)计算时间常数并编写程序实现。
提交试验报告: 每次实验完毕后记录实验结果,在下次实验时提交上次实验的实验报告。 报告内容: (1)实验目的 (2)实验内容 (3)实验原理图与线路连接 (4)实验步骤 (5)实验结果 (6)实验体会
SETB EA
; CPU开中断
SETB ET0
; T1开中断
MOV TH1,# H ; 装入T1计数初值
MOV TL1,# H
SETB TR0
; 启动T0
SETB TR1
; 启动T1
SJMP $
; 等待中断
DVT0 :CPL P1.6
RETI
DVT1: MOV TH0,# H ; 重新装入T1计数初值
start: mov ie,#10000001b
;中断使能
mov ip,#00000001b
;中断优先
mov tcon,#0000000b
;中断为电平触发
mov sp,#70h
;堆栈指针
loop: mov a,#0ffh
;左移动初值
clr c
; C=0
mov r2,#08
;左移动8次
loop1:rlc a mov p1,a call delay djnz r2,loop1 mov r2,#07
MOV A,31H
MOV P0,A
MOV P2,A
RL A
MOV 31H,A
T_END:
POP PSW
POP ACC
RETI
END
3、计数:对生产线传送带上单向传送的产品计数。要求每计36个产品发一个信号(P1.0闪烁),试用单 片机定时器/计数器T1完成该任务。
分析:
(1)初始化:用T1,计数,方式2,GATE=0
三、实验内容
1、硬软件结合定时:利用定时/计数器T0工作在方式1,采用中断方式,晶振频率12NHZ,产生50ms的
定时。应用软件与T0结合延长定时时间至3s,使LED灯闪烁。
用1PIN线将单片机的P1.1与一个LED灯相连,参考程序如下:
org
0000h
ljmp
main
org
000bh
ljmp
int_timer0
MOV TL0,# H
CPL P1.7
RETI
END
三、实验内容
1、中断程序的应用 :P1口接8个灯循环点亮亮,P3.2接键盘,按下后实现中断,使全部灯闪烁5次后继续
循环亮。
org 0000h
;开始
jmp start
org 0003h
;int0中断入口(p32)
jmp ext0
;到中断子程序
org 0080h
cpl
l1:
reti
end
ie,#82h
;设置中断允许寄存器
30h,#10
31h,#6
;30H和31H是两个软件计数器。
tr0
;启动定时
$
;原地踏步
;定时器0中断服务程序。
th0,# (65536-50000)/256
tl0,#(65536-50000)%256 ;重设50MS定时。
30h,l1
30h,#10
MOV P2,#0FFH
MOV 30H,#00H
;计数器单元清0
MOV 31H,#0FEH
MOV TMOD,#01H ;定时/计数器0工作于方式1
MOV TH0,#4CH
MOV TL0,#00H
;50ms定时常数
SETB EA
;开总中断
SETB ET0
;允许定时/计数器0 中断
SETB TR0
;启动定时/计数器0 中断
;右移动7次了吗?
;把a压入堆栈 ;保存现场 ;设定工作寄存器1
;使P1全亮一次 ;闪烁5次(亮灭共10次,小心了)
loop3:mov p1,a call delay cpl a djnz r2,loop3 pop psw pop acc reti
delay: mov r5,#20 d1:mov r6,#20 d2: mov r7,#250 djnz r7,$ djnz r6,d2 djnz r5,d1 ret
31h,l1
31h,#6
;软件计数
p1.1
;10*6*50MS=3000MS时间到,P1.1取反
;中断返回
2、硬件定时:51单片机的定时器工作在方式1时的最长定时时间为65ms(晶振12MHZ),若要更长时间 的定时,需要T0和T1 2个定时器级联。 (1)用1PIN线将单片机的P1.7与P3.5(定时/计数器T1外部输入端)相连,P1.6与某个LED灯连接。 (2)T0工作在方式2、定时,在P1.7输出0.4ms的方波;T1工作在方式1,计数,在P1.6输出1S、3S的方波,使 LED灯闪烁。 (3)计算时间常数并编写程序
5)如右图,点击工程下拉菜单中的”目标 ’目标1’属性”;
6)单击”目标”,输入仿真器的频率12(MHz);
7)选择”输出”菜单中的”生成HEX文件”,以便汇编后产生HEX代码,供编程器使用;
8)在”调试”菜单中,选择如下功能,
并”点击设置”,进行 右图设置,注意你使用 的是那个串口(Com1还 是其它的,可以看设备 管理器);
loop2:rrc a mov p1,a call delay djnz r2,loop2 jmp loop
ext0: push acc push psw setb rs0 clr rs1 mov a,#00 mov r2,#10
;含c左移动一位 ;输出到P1口
;延时 ;左移动8次了吗? ;设定右移7次
ORG 0000H LJMP MAIN
ORG 000BH LJMP DVT0
ORG 001BH LJMP DVT1 ORG 0100H MAIN:MOV TMOD,#52H
;T0方式2定时、T1方式1计数
MOV TH0,# H ; 装入T0定时初值 MOV TL0,# H
SETB ET0
; T0开中断
相关文档
最新文档