ADD A#loH MOV 41H. A MOV DATA OUT. #15 HEX译码指令 LCALL SEND Mov A GRO ANL A #OFH 取键码的低4位 ADD A 41H MoV DATA oUT. a ;在第0位显示 LCALL SEND INC RO NC DPTR LCALL YS2 41H #OOH DJNZ RI, BACK2 BACK2 LJMP BACK3 MOV 60H #02H MOV 61H #33H YS2 MOV 62H #33H DJNZ 62H, YS3 DJNZ 61H, YS2 心得体会: 11
11 ADD A,#10H MOV 41H,A MOV DATA_OUT,#15H ;HEX 译码指令 LCALL SEND MOV A,@R0 ANL A,#0FH ;取键码的低 4 位 ADD A,41H MOV DATA_OUT,a ;在第 0 位显示 LCALL SEND INC R0 INC DPTR LCALL YS2 MOV 41H,#00H DJNZ R1,BACK2 RET BACK2: LJMP BACK3 YS: MOV 60H,#02H YS1: MOV 61H,#33H YS2: MOV 62H,#33H YS3: DJNZ 62H,YS3 DJNZ 61H,YS2 DJNZ 60H,YS1 RET END 心得体会:
实验三:外部数据存储器的应用(2864) 目的:学会单片机和外部程序存储器的交流,知道比较程序存储器和数据存储器的差异。 要求:以2864数据存储器为实例,按照系统板上的硬件地址对其进行编程,写出 单片机与2864的接口地址,读出2864中连续16个字节的随机数,由小到大排序, 然后再存放到2864的相应字节中。(由BC7281显示地址及数据,前四位地址,最后 两位数据) 原理: T4u 5573 哥 + 步骤:1,连接PC机和仿真机的串口线 2,连接P10—DAT,P1.1—KEY,P1.2—CLK ,给仿真机接通电源 4,打开仿真机的电源开关,电源灯亮表示仿真机已经带电。 5,编程
12 实验三:外部数据存储器的应用(2864) 目的:学会单片机和外部程序存储器的交流,知道比较程序存储器和数据存储器的差异。 要求:以 2864 数据存储器为实例,按照系统板上的硬件地址对其进行编程,写出 单片机与 2864 的接口地址,读出 2864 中连续 16 个字节的随机数,由小到大排序, 然后再存放到 2864 的相应字节中。(由 BC7281 显示地址及数据,前四位地址,最后 两位数据) 原理: 1 2 3 4 5 6 A B C D 1 2 3 4 5 6 D C B A Title Size Number Revision B Date: 22-Sep-2005 Sheet of File: D:\chu\MyDesign1. ddb Drawn By: EA/VP 3 1 X 1 1 9 X 2 1 8 RESET 9 R D 1 7 W R 1 6 INT0 1 2 INT1 1 3 T0 1 4 T1 1 5 P10 1 P11 2 P12 3 P13 4 P14 5 P15 6 P16 7 P17 8 P00 3 9 P01 3 8 P02 3 7 P03 3 6 P04 3 5 P05 3 4 P06 3 3 P07 3 2 P20 2 1 P21 2 2 P22 2 3 P23 2 4 P24 2 5 P25 2 6 P26 2 7 P27 2 8 PSEN 2 9 ALE/P 3 0 TXD 1 1 RXD 1 0 89C51 20uF 1 K +5V 11. 0592MHz 30PF 30PF A 0 2 A 1 3 A 2 4 A 3 5 A 4 6 A 5 7 A 6 8 A 7 9 B 0 1 8 B 1 1 7 B 2 1 6 B 3 1 5 B 4 1 4 B 5 1 3 B 6 1 2 B 7 1 1 E 1 9 DIR 174A LS245 O C 1 C 1 1 1 D 2 2 D 3 3 D 4 4 D 5 5 D 6 6 D 7 7 D 8 8 D 9 1 Q 1 9 2 Q 1 8 3 Q 1 7 4 Q 1 6 5 Q 1 5 6 Q 1 4 7 Q 1 3 8 Q 1 2 74ALS573 A 1 B 2 C 3 E1 4 E2 5 E3 6 Y 0 1 5 Y 1 1 4 Y 2 1 3 Y 3 1 2 Y 4 1 1 Y 5 1 0 Y 6 9 Y 7 7 74ALS138 +5v 1 2 3 A 74ALS00 1 2 3 A 74ALS00 A 0 1 0 A 1 9 A 2 8 A 3 7 A 4 6 A 5 5 A 6 4 A 7 3 A 8 2 5 A 9 2 4 A10 2 1 A11 2 3 A12 2 CE 2 0 O E 2 2 PGM 2 7 VPP 1 D 0 1 1 D 1 1 2 D 2 1 3 D 3 1 5 D 4 1 6 D 5 1 7 D 6 1 8 D 7 1 9 2864 步骤:1,连接 PC 机和仿真机的串口线。 2,连接 P1.0—DAT,P1.1—KEY,P1.2—CLK。 3,给仿真机接通电源。 4,打开仿真机的电源开关,电源灯亮表示仿真机已经带电。 5,编程
6,调试。 参考程序 CCQ EQU0000H;外部数据RAM的地址从0000H开始到1FFH结束 BIT COUNT DATA 06FH TIMER DATA 06EH TIMERI DATA 06DH DATA 06CH DATA IN DATA 02FH DATA OUT DATA 02EH CLK BIT P1. 2 定义I/0口 BIT P1. 0 bIT PL. 1 ORG 000OH MAIN LCALL XSFW RO, #30H RI. #10H MOV DPTR,#CCQ;外部数据RAM的地址从0000H开始到1FFH结束 BACK MOVX A. DPTR DV @ RO. A DPTR DJNZ Rl, BACK LCALL PAIXU MOv RO. #30H Mov R1. #lOH MOV DPTR,#005OH;外部数据RAM的地址从0000H开始到1FFH结東 BACK1 MOV A, ORO MOVX DPTR. A LCALL YS4 INC DPTR DJNZ Rl, BACKI LCALL XSSHJ SJMP PAIXU: RO. #30H 排序子程序 R1,#31H MOV 40H #OFH LOP 41H 40H A,@R0 SUBB A @R1 NEXT
13 6,调试。 参考程序: CCQ EQU 0000H;外部数据 RAM 的地址从 0000H 开始到 1FFFH 结束 BIT_COUNT DATA 06FH TIMER DATA 06EH TIMER1 DATA 06DH TEMP DATA 06CH DATA_IN DATA 02FH DATA_OUT DATA 02EH CLK BIT P1.2 ;定义 I/O 口 DAT BIT P1.0 ; KEY BIT P1.1 ; ORG 0000H MAIN: LCALL XSFW MOV R0,#30H MOV R1,#10H MOV DPTR,#CCQ;外部数据RAM的地址从0000H开始到1FFFH结束 BACK: MOVX A,@DPTR MOV @R0,A INC R0 INC DPTR DJNZ R1,BACK LCALL PAIXU MOV R0,#30H MOV R1,#10H MOV DPTR,#0050H ;外部数据 RAM 的地址从 0000H 开始到 1FFFH 结束 BACK1: MOV A,@R0 MOVX @DPTR,A LCALL YS4 INC R0 INC DPTR DJNZ R1,BACK1 LCALL XSSHJ SJMP $ PAIXU: MOV R0,#30H ;排序子程序 MOV R1,#31H MOV 40H,#0FH LOP: MOV 41H,40H LP: MOV A,@R0 CLR CY SUBB A,@R1 JC NEXT
MOV A eRO XCH A,@R1 @RO. A NEXT DJNZ 41H, LP MO A RO A MOV R1. A DJNZ 40H, LOP TMOD, #OlH R5,#01H LOOP THO, #OCH MOV TLO. #OOH SETB TRO TFO, S CLR TFO DJNZ R5, LOOP 水水水水水水水水水客水水本水水水本水水水水本水水冰水水水冰水水水冰水水水水水水水水水冰水客水冰 XSFW MOV TIMER. #50 START DELAY: MOV TIMER. 延时以确保BC728X完成复位 START DELAYI: DJNZ TIMERL, START DELAYl DJNZ TIMER, START DELAY DATA OUT,#12H;BC728X初始化 LCALL MOV DATA OUT,#8OH;设定为164模式,不反相 LCALL SEND RET *向BC728X发送一个字节子程序,待发送数据存于 DATA OUT 本水水水水水冰水水冰水水水水水水水客水水半水水水冰客水水水水水水水求水水半水水水水本冰水水水水客 SEND CLR CLK 在CLK输出一脉冲 SETB CLK JB DAT, WAITI 等待DAT变为低电平 CLR CLK 再输出一CLK脉冲 CLK WAIT2 JNB DAT,WAIT2;等待DAT恢复高电平(输入状态) MOV BIT COUNT, #8 SEND LOOP MOV C DATA OUT. 7 输出BIT MOV DAT. C CLR CLK 输出一CLK脉冲
14 MOV A,@R0 XCH A,@R1 MOV @R0,A NEXT: INC R1 DJNZ 41H,LP INC R0 MOV A,R0 INC A MOV R1,A DJNZ 40H,LOP RET YS4: MOV TMOD,#01H MOV R5,#01H LOOP: MOV TH0,#0CH MOV TL0,#00H SETB TR0 JNB TF0,$ CLR TF0 CLR TR0 DJNZ R5,LOOP RET ;*********************************************************** XSFW: MOV TIMER,#50 START_DELAY: MOV TIMER1,#255 ;延时以确保 BC728X 完成复位 START_DELAY1: DJNZ TIMER1,START_DELAY1 DJNZ TIMER,START_DELAY MOV DATA_OUT,#12H ;BC728X 初始化 LCALL SEND MOV DATA_OUT,#80H ;设定为 164 模式, 不反相 LCALL SEND RET ;************************************************************* ;* 向 BC728X 发送一个字节子程序,待发送数据存于 DATA_OUT ;************************************************************ SEND: CLR CLK ;在 CLK 输出一脉冲 SETB CLK WAIT1: JB DAT,WAIT1 ;等待 DAT 变为低电平 CLR CLK ;再输出一 CLK 脉冲 SETB CLK WAIT2: JNB DAT,WAIT2 ;等待 DAT 恢复高电平(输入状态) MOV BIT_COUNT,#8 SEND_LOOP: MOV C,DATA_OUT.7 ;输出 BIT7 MOV DAT,C CLR CLK ;输出一 CLK 脉冲
SETB CLK MOV A DATA OUT RL A MOV DATA OUT. A DATA OUT左移一位 NOP 短暂延时 NOP DJNZ BIT COUNT, SEND LOOP SETB DAT ;恢复DAT为高电平 RET 水水水冰本水水水水水冰客求水水水客水水冰水水水冰水水水冰水水水冰水水水水本水水水水水冰客水冰客水水冰*冰 *从BC728X接收一个字节子程序,接收到的数据存于DATA_IN 本水水水水本水水水水水冰客水冰水客水水冰客水水水冰水水水水求水水冰冰水水水半水*水冰本水水水水本水冰本水水水 RECEIVE CLR CLK 发出一CLK脉冲 SETB CLK WAIT JB DAT, WAIT3 等待DAT低电平响应信号 CLR CLK 再发出一CLK脉冲,准备接收数据 SETB CLK MOV BIT COUNT, #8 RECV LOOP NOP 短暂延时 NOP NOP NOP NOP NOP NOP MOV A DATA IN MOV C, DAT 读入一位 RLC A MOV DATA IN. A CLR CLK 发出CLK脉冲 CLK DJNZ BIT COUNT, RECV LOOP XSSHJ MOV RO. #30H 41H #OOH DPTR, #CCQ BACK3 MOV DATA OUT, #15H HEX译码指令 LCALL SEND
15 SETB CLK MOV A,DATA_OUT RL A MOV DATA_OUT,A ;DATA_OUT 左移一位 NOP ;短暂延时 NOP NOP DJNZ BIT_COUNT,SEND_LOOP SETB DAT ;恢复 DAT 为高电平 RET ;************************************************************* ;* 从 BC728X 接收一个字节子程序,接收到的数据存于 DATA_IN ;************************************************************* RECEIVE: CLR CLK ;发出一 CLK 脉冲 SETB CLK WAIT3: JB DAT,WAIT3 ;等待 DAT 低电平响应信号 CLR CLK ;再发出一 CLK 脉冲,准备接收数据 SETB CLK MOV BIT_COUNT,#8 RECV_LOOP: NOP ;短暂延时 NOP NOP NOP NOP NOP NOP NOP MOV A,DATA_IN MOV C,DAT ;读入一位 RLC A MOV DATA_IN,A CLR CLK ;发出 CLK 脉冲 SETB CLK DJNZ BIT_COUNT,RECV_LOOP RET XSSHJ: MOV R0,#30H MOV R1,#10H MOV 41H,#00H MOV DPTR,#CCQ BACK3: MOV DATA_OUT,#15H ;HEX 译码指令 LCALL SEND