扬大电气单片机实验程序

更新时间:2023-10-24 13:27:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

3.1Keil集成开发环境熟悉及汇实验编程序 1.

MOV 20H,#98H MOV A,20H MOV B, #100 DIV AB

MOV 30h, A XCH A, B MOV B, #10 DIV AB MOV 31H,A MOV 32H,B RET END 2.

MOV 20H,#78H MOV A,20H ANL A,#0FH ADD A,#30H MOV 30H,A MOV A,20H ANL A,#0F0H SWAP A ADD A,#30H MOV 31H,A 3. MAIN:

MOV 30H,#2 MOV 31H,#3 MOV 3AH,#4 MOV 43H,#3 MOV R0,#30H MOV R7,#10 MOV A,#00H

LOOP:MOV @R0,A INC R0

DJNZ R7,LOOP RET END 4. MAIN:

MOV 30H,#3 MOV 31H,#5 MOV 3FH,#6 MOV R0,#30H MOV R1,#40H MOV R7,#16

LOOP:MOV A,@R0 MOV @R1,A

INC R0 INC R1

DJNZ R7,LOOP RET END

并行I/O接口实验 1. ORG 0000H AJMP MAIN ORG 0100H MAIN:

MOV A,#0FEH LIGHT:

MOV P1,A RR A MOV P1,A ACALL DELAY AJMP LIGHT DELAY:

MOV R7,#250 DELAY1:

MOV R6,#250 NOP DELAY2:

DJNZ R6,DELAY2 DJNZ R7,DELAY1 RET END

2. ORG 0000H AJMP MAIN ORG 0100H MAIN: SETB P1.0 SETB P1.1 LOOP: MOV C,P1.0 MOV P1.2,C MOV C,P1.1 MOV P1.3,C AJMP LOOP SJMP $ END

3. ORG 0000H AJMP MAIN ORG 0100H MAIN:

SETB P1.7 LOOP:

MOV C,P1.7 MOV P1.1,C

MOV P1.0,C AJMP LOOP SJMP $ END

3.3点阵式LED显示实验 1. ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV A,#0FEH MOV R4,#8 LCALL T164 SJMP MAIN T164: RLC A

MOV P3.3,C MOV P3.4,C SETB P3.2 CLR P3.2 LCALL DEL DJNZ R4,T164 DEL: MOV R5,#04H DEL1: MOV R6,#0FFH DEL2: MOV R7,#0FFH DEL3: DJNZ R7,DEL3 DJNZ R6,DEL2 DJNZ R5,DEL1 END 2. ORG 0 SJMP MAIN ORG 30H MAIN: MOV R1,#10

X: MOV DPTR,#TABX MOV B,#0FEH ;B寄存器作列值变换 CLR C MOV R2,#8 ;R2作列循环计数 LCALL LOOP DJNZ R2,LOOP DJNZ R1,X SJMP MAIN

LOOP: MOV A,#0 MOV P1,#0FFH MOV R4,#8

;R4作行串并转换计数

;行值设置

MOVC A,@A+DPTR INC DPTR LCALL T164

;列值设置 MOV P1,B MOV A,B RL A MOV B,A ;延时 LCALL DEL RET

SJMP MAIN

;串并转换程序 T164: RLC A MOV P3.3,C MOV P3.4,C SETB P3.2 CLR P3.2 DJNZ R4,T164 RET

;延时子程序

DEL: MOV R5,#20 DEL1: MOV R6,#125 DEL2: DJNZ R6,DEL2 DJNZ R5,DEL1 RET

TABX: DB 7EH,0BDH,0DBH,0E7H,0E7H,0DBH,0BDH,7EH TABT: DB 0FCH,0FCH,0FCH,00H,00H,0FCH,0FCH,0FCH TABL: DB 00H,00H,3FH,3FH,3FH,3FH,3FH,3FH TABE: DB 00H,00H,24H,24H,24H,24H,24H,24H 3.4 I2C总线和8段LED显示实验 1.

内容1,显示12345678

;************************************************************************ ; 定义器件地址及存放单元 ZLG7290 EQU 70H ;ZLG7290的器件地址 SLA DATA 63H ;器件的从地址 SUBA DATA 64H ;器件的子地址 ; 定义变量单元 ACK BIT 10H ;应答标志位 NUMBYTE DATA 62H ;读/写的字节数变量 MTD EQU 6EH ;发送数据缓冲器

DISBUF EQU 66H ;66H~6DH为显示缓冲区,66H对

应最右一位

;以上定义一般不要改动

; I2C引脚定义 SDA BIT P3.0 SCL BIT P3.1 RST BIT P3.6

;************************************************************************ ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV SP,#70H

;设堆栈,建议堆栈设在此处

LCALL RE7290 ;复位RE7290

MOV R0,#DISBUF ;显缓区首地址(66H) MOV A,#1FH ;将熄灭码依次填入显缓区 MOV R2,#8 MLOOP: MOV @R0,A INC R0 DJNZ R2,MLOOP CC: MOV R0,#DISBUF MOV R3,#08H MOV A,#08H AA: MOV @R0,A INC R0 DEC A DJNZ R3,AA LCALL LEDDISP ;调用显示程序 LCALL DELAY ;延时 SJMP CC

$INCLUDE(LEDDISP_ASM.INC) ;包含LED显示模块程序 END 2.

ZLG7290 EQU 70H SLA DATA 63H SUBA DATA 64H ACK BIT 10H NUMBYTE DATA 62H MTD EQU 6EH DISBUF EQU 66H SDA BIT P3.0 SCL BIT P3.1

RST BIT P3.6

ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV SP, #70H LCALL RE7290 MOV R0, #DISBUF MOV A, #1FH MOV R2, #8 MLOOP: MOV @R0, A INC R0 DJNZ R2, MLOOP AA: MOV R0, #DISBUF MOV A,P1 MOV B,#64H DIV AB MOV @R0,A INC R0 MOV A,B MOV B,#10 DIV AB MOV @R0,A INC R0 MOV A,B MOV @R0,A LCALL LEDDISP LCALL DELAY SJMP AA $INCLUDE(LEDDISP_ASM.INC) END 3.5中断实验 1. ORG 0

LJMP MAIN ORG 0003H LJMP INT00 ORG 30H

MAIN:SETB EA SETB EX0 SETB IT0 SETB P1.0

HERE:JMP HERE INT00:CPL P1.0 RETI END 2. ORG

0000H

LJMP MAIN ORG 0003H LJMP INTT0 ORG 0100H MAIN: SETB EX0 SETB IT0 SETB EA MOV R1,#0 MOV A,#0FCH //点亮最低位应送值 CL: MOV R4,#8 //移位7次 DL: MOV R5,#10 //50MS*10 MOV P1,A CHULI: CJNE R1,#0,CHULI1 //R1为0,左移一位循环点亮 RL

A

CHULI1: CJNE R1,#1,CHULI2 //R1为1,右移一位循环点亮 RR A

CHULI2: CJNE R1,#2,CHULI3 //R1为2,左移两位循环点亮 RL A

RL

A

CHULI3: CJNE R1,#3,DELAY //R1为3,右移两位循环点亮 RR A RR A

DELAY: LCALL DEL DJNZ R5,DELAY //每一次调用DEL延时50ms,调用R5次 DJNZ R4,DL //每轮位移R4次 LJMP CL //一轮结束,从头再来,主要从新赋值R4

DEL: MOV R6,#200 //较精确50ms延时 DEL1: MOV R7,#123 NOP DEL2: DJNZ R7,DEL2 DJNZ R6,DEL1 RET

INTT0: INC R1 CJNE R1,#4,FANHUI MOV R1,#0

FANHUI: RETI

END 3. ORG 0

LJMP MAIN ORG 0003H LJMP INTOO ORG 30H

MAIN:SETB EA SETB EX0 SETB IT0 SETB P1.0 MOV 30H,#0 ORG 50H

HERE:JMP HERE INTOO:MOV A,30H ADD A,#1 MOV 30H,A MOV A,31H ADDC A,#0 MOV 31H,A MOV A,30H CPL A

MOV P1,A RETI END

3.6 定时/计数器实验 1.

;调用LED显示的示例程序:将按键连到T0引脚,程序对按键次数计数并显示。

;************************************************************************ ; 定义器件地址及存放单元 ZLG7290 EQU 70H ;ZLG7290的器件地址 SLA DATA 63H ;器件的从地址 SUBA DATA 64H ;器件的子地址 ; 定义变量单元 ACK BIT 10H ;应答标志位 NUMBYTE DATA 62H ;读/写的字节数变量 MTD EQU 6EH ;发送数据缓冲器 DISBUF EQU 66H ;66H~6DH为显示缓冲区,66H对应最右一位

;以上定义一般不要改动

; I2C引脚定义 SDA BIT P3.0 SCL BIT P3.1

RST BIT P3.6

;************************************************************************

ORG 0000H LJMP MAIN ORG 0100H

MAIN:

MOV SP,#70H ;设堆栈,建议堆栈设在此处 LCALL RE7290 ;复位RE7290 MOV R0,#DISBUF ;显缓区首地址(66H) MOV A,#1FH ;将熄灭码依次填入显缓区 MOV R2, #8

MLOOP: MOV @R0, A INC R0 DJNZ R2, MLOOP MOV TMOD,#05H MOV TH0,#0 MOV TL0,#0 SETB ET0 SETB EA SETB TR0

PLAY: MOV R1,TL0 MOV A,R1 CPL A MOV R1,A MOV P1,R1 MOV B,#100 MOV A,TL0 DIV AB MOV 68H,A MOV A,B MOV B,#10 DIV AB MOV 67H,A MOV 66H,B MOV B,#100 MOV A,TH0 DIV AB MOV 6BH,A MOV A,B MOV B,#10 DIV AB MOV 6AH,A

MOV 69H,B

LCALL LEDDISP LCALL DELAY LJMP PLAY

$INCLUDE(LEDDISP_ASM.INC)

END 2.

ORG 0000H LJMP MAIN ORG 000BH LJMP IT0P ORG 0100H MAIN: MOV SP,#60H ;设堆栈指针

MOV B,#20 ;设循环次数20次 MOV TMOD,#01H MOV TL0,#0B0H MOV TH0,#3CH SETB TR0 SETB ET0

SETB EA

HERE: SJMP HERE ;原地循环,等待中断 IT0P: MOV TL0,#0B0H ;重装初值 MOV TH0,#3CH DJNZ B,LOOP MOV B,#20 CPL P1.0

LOOP: RETI ;返回“SJMP HERE”处 END 3. ORG 0000H LJMP MAIN ORG 000BH LJMP IT0P ORG 001BH LJMP IT1P ORG 0100H MAIN: MOV SP,#60H MOV TMOD,#16H ;IT0计数,IT1定时 MOV TL0,#0FFH MOV TH0,#0FFH SETB TR0 SETB ET0 MOV TL1,#0B0H MOV TH1,#3CH

本文来源:https://www.bwwdw.com/article/kbc2.html

Top