当前位置:首页 > 新单片机实验指导书
CJNE A, #0FDH, KEY04 LP1: MOV P2, #11111001B MOV R6,#0F9H AJMP KEY01 LP2: KEY04: DJNZ R6,LP2 CJNE A, # 0FBH,KEY05 DJNZ R7,LP1 MOV P2, #11100011B RET AJMP KEY01 END
#include
while((P1&0x0f)!=0x0f); switch(key){ case 0xfe: P2=0xfe; break; case 0xfd: P2=0xf9; break; case 0xfb: 21
void ttt(void) { int i; for (i=0;i<300;i++){} } void tt(void) { unsigned long j; for (j=0;((j<80000)&&((P1&0xff)!=0xf7)); j++){} } void main() { WDTCN=0x0DE ; WDTCN=0x0AD; OSCXCN=0x065 ; ttt(); OSCICN|=0x08 ; XBR2=0x040 ; P1MDOUT=0x0FF ; P2MDOUT=0x0FF ; P2=0x0ff; P1=0x0ff; while(1) { while((P1&0x0f)==0x0f) {} key=data0=P1; do { ttt(); } P2=0xff; do { ZSD=0; tt(); ZSD=1; tt(); } while((P1&0xff)!=0xf7); break; case 0xf7: P2=0xff; break; default: break; } } }
22
实验四 计数器实验
一、实验目的
1. 学习8031 内部定时/计数器使用方法 2. 学习计数器各种工作方式的用法 3. 进一步掌握中断处理程序的编写方法
二、实验内容
要求编写一程序实现下列功能:主程序一盏指示灯(P2.7)连续闪动,片内定时/计数器 T0 与外部脉冲输入联接,每当输入5个脉冲后,计数器 T0 产生中断,在中断程序中,R0 加一,并将R0 数值以十进制的方式通过P2口在八位逻辑电平显示模块中显示出来。
三、实验电路
单次脉冲电路见下图,位逻辑电平显示电路见实验三。
四、实验步骤
1.系统各跳线器处在初始设置状态(参见附录),MCU 的JD13(P2 口) 与八位逻辑电平显示模块的JD30连接。P1.0 端口接单次脉冲电路的输出端。 2.编译、生成项目、下载程序,调试运行程序。 3.观察指示灯(P2.7)是否连续闪动。
4. 连续按动单次脉冲的按键, 是否每按动五次, 八位逻辑电平显示模块中显示出来的数据加一。
五、实验程序参考框图
ORG 0000H LJMP START ORG 0BH LJMP JUQ ORG 0100H START: SETB P2.7 ACALL TTT ACALL TTT JMP LOOP 中断程序 JUQ: PUSH ACC ; 保护现场 PUSH PSW MOV TH0, #0FFH ; 置T0计数初值 MOV TL0, #0FBH INC 20H MOV A,20H CPL A MOV P2,A POP PSW ; 恢复现场 POP ACC RETI TTT: MOV R7,#0FFH MOV XBR0, #07h MOV XBR1, #02h MOV XBR2, #40h ; 交叉开关允许 MOV WDTCN, #h0DEH ; 禁止看门狗 MOV WDTCN, #0ADH MOV OSCXCN, #65h ; 外部晶振 22.1184MHz MOV P0MDOUT, #0ffh ; 端口配置为推絻输出方式 MOV P2MDOUT, #0ffh ; 口配置为推絻输出方式 输出 MOV SP, #30H MOV 20H, #00 MOV TMOD, #05H MOV TH0, #0FFH 23
MOV TL0, #0FBH TTT1: MOV R6,#0F9H MOV IE,#82H TTT2: NOP SETB TR0 NOP LOOP: CLR P2.7 DJNZ R6,TTT2 ACALL TTT DJNZ R7,TTT1 ACALL TTT RET END
主程序开始 中断程序开始 初始化 保护数据
T0定时器设置 重新载入计数初值 T0中断设置 R0 加一
R0 十进制调整
开中断 启动计数器 R0取反送P2口显示
恢复数据
指示灯连续闪动
中断结束 单次脉冲电路图
24
共分享92篇相关文档