1、K1开关C01、C02电容30pF二个C122uFVcc电源+5V导线若干三、实验内容1、 焊接 根据实验原理图在电路板上焊接电路2、 四、实验原理图五、程序举例ORG 0000H 程序起始地址 MOV R2,#18H 设置循环次数LOOP: CLR P1.0 循环给P1.0置“0” DJNZ R2,LOOPEND实验二 单片机单个I/O的控制系统 掌握对CPU单个I/O的控制,编写程序让发光二极管每秒钟闪动一次。循环控制:ORG 0000H LOOP:SETB P1.0LCALL DELAY 延时0.5s;CLR P1.0 LCALL DELAYAJMP LOOP 转循环程序;DELAY:M
2、OV R3,#2 延时子程序;D1: MOV R4,#250D2: MOV R5,#250DJNZ R5,$DJNZ R4,D2DJNZ R3,D1 RET END 中断控制: ORG 0000H AJMP MAIN 转主程序; ORG 000BH AJMP INT_TIMER0 T0中断服务程序; ORG 0030H MAIN:MOV TMOD,#01H T0初始化; MOV TH0,#3CH MOV TL0,#0B0H 送100m时间常数; MOV IE,#82H 允许T0中断、CPU开中断; MOV 30H,#5 设置100ms计数器初值; SETB TR0 启动T0计数; AJMP $
3、 等待; INT_TIMER0: MOV TH0,#3CH 重置T0初值50ms; MOV TL0,#0B0H DJNZ 30H,L1 判500ms到否? MOV 30H,#5 恢复100ms计数器初值; CPL P1.0 500ms到,P1.0求反; L1:RETI 返主。 END实验三 单片机多个I/O的控制系统 掌握对CPU的多个I/O控制,在P1口实现8个发光二极管的流水闪烁。AT89S51芯片八个30PfORG 00HSTART:MOV A,#0FFH CLR CMOV R2,#08H 发光二极管的个数; RLC A 左移累加器A中的内容;MOV P1,A A中内容送P1口,点亮一个
4、二极管;CALL DELAY 延时约2ms;DJNZ R2,LOOP 转循环程序,依次点亮8个二极管;MOV R2,#07HLOOP1:RRC A 右移累加器A中的内容;MOV P1,A 熄灭一个二极管;CALL DELAY 延时DJNZ R2,LOOP1 转循环程序,依次熄灭8个二极管;JMP START 跳转开始,重新执行循环DELAY:MOV R3,#20 延时子程序 MOV R4,#20 MOV R5,#248RET实验四 三位循环计数系统 用来熟悉对多位数码管的驱动和正确显示。数码管共阴极三个十一个三极管NPN型9013ORG 0000HA_BIT EQU 30H 第一位数码管数值;
5、B_BIT EQU 31H 第二位数码管数值;C_BIT EQU 32H 第三位数码管数值;ORG 0000H 程序起始地址;AJMP STARORG 0030H STAR的起始地址;STAR:CLR P0.0MOV A,#00H 清空累加器;MOV A_BIT,A MOV B_BIT,AMOV C_BIT,ASTLOP: ACALL DISPLAY 调用显示子程序;INC A_BITMOV A,A_BITCJNE A,#10,STLOP 判断第一位是否到10,到10则第二位开始计MOV A_BIT,#00H 数;INC B_BITMOV A,B_BITCJNE A,#10,STLOP 判断第
6、二位是否到10,到10则第三位开始计MOV B_BIT,#00H 数;INC C_BITMOV A,C_BITCJNE A,#10,STLOP 判断第三位是否到10,到10则给第三位清0;MOV C_BIT,#00H AJMP STLOPDISPLAY: MOV DPTR,#NUMTAB 字形表首地址;MOV R0,#4 DPL1: MOV R1,#250 DPLOP: MOV A,A_BIT MOVC A,A+DPTR 送第一位字形码;MOV P1,A SETB P2.4 开第一位显示;ACALL D1MS 延时1MS;CLR P2.4 关第一位显示;MOV A,B_BIT MOVC A,A
7、+DPTR 送第二位字形码;SETB P2.5 开第二位显示;CLR P2.5 关第二位显示;MOV A,C_BIT MOVC A,A+DPTR 送第三位字形码;SETB P2.6 开第三位显示;CLR P2.6 关第三位显示;DJNZ R1,DPLOP 防止余辉效应;DJNZ R0,DPL1 D1MS: MOV R7,#80 延时子程序,延时约300uS;DJNZ R7,$数码管八段字形表:NUMTAB: DB 0E7H,21H,0CBH,6BH,2DH,6EH,0EEH,27H,0EFH,6FH实验五 测温系统 利用单片机构成实用系统,熟悉单片机和外围设备的通讯。十个4.7K温度传感器DA
8、LLAS DS18B20TEMPER_L EQU 29H 用于保存读出温度的低8位TEMPER_H EQU 28H 用于保存读出温度的高8位FLAG1 EQU 38H 是否检测到DS18B20标志位a_bit equ 20h 数码管个位数存放内存位置b_bit equ 21h 数码管十位数存放内存位置MAIN:LCALL GET_TEMPER 调用读温度子程序MOV A,29HMOV C,40H 将28H中的最低位移入CRRC AMOV C,41HMOV C,42HMOV C,43HMOV 29H,ALCALL DISPLAY 调用数码管显示子程序CPL P1.0AJMP MAININIT_1
9、820: DS18B20复位初始化子程序SETB P2.2NOPCLR P2.2MOV R1,#3 主机发出延时537微秒的复位低脉冲TSR1:MOV R0,#107DJNZ R0,$DJNZ R1,TSR1SETB P2.2 然后拉高数据线MOV R0,#25HTSR2:JNB P2.2,TSR3 等待DS18B20回应DJNZ R0,TSR2LJMP TSR4 延时TSR3:SETB FLAG1 置标志位,表示DS1820存在CLR P1.7 检查到DS18B20就点亮P1.7LEDLJMP TSR5TSR4:CLR FLAG1 清标志位,表示DS1820不存在CLR P1.1LJMP T
10、SR7TSR5:MOV R0,#117TSR6:DJNZ R0,TSR6 时序要求延时一段时间TSR7:GET_TEMPER: 读出转换后的温度值LCALL INIT_1820 先复位DS18B20JB FLAG1,TSS2CLR P1.2RET 判断DS1820是否存在?若DS18B20不存在则返回TSS2:CLR P1.3 DS18B20被检测到!MOV A,#0CCH 跳过ROM匹配LCALL WRITE_1820MOV A,#44H 发出温度转换命令LCALL DISPLAYLCALL INIT_1820 准备读温度前先复位MOV A,#0BEH 发出读温度命令LCALL READ_1
11、8200 将读出的温度数据保存到35H/36H CLR P1.4WRITE_1820: 写DS18B20的子程序MOV R2,#8 一共8位数据WR1:MOV R3,#6DJNZ R3,$MOV P2.2,CMOV R3,#23DJNZ R2,WR1READ_18200: 读DS18B20的程序,从DS18B20中读出两个字节的温度数据MOV R4,#2 将温度高位和低位从DS18B20中读出MOV R1,#29H 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)RE00:MOV R2,#8 数据一共有8位RE01:MOV R3,#9RE10:DJNZ R3,RE10MO
12、V C,P2.2RE20:DJNZ R3,RE20DJNZ R2,RE01MOV R1,ADEC R1DJNZ R4,RE00 MOV A,29H 将29H中的十六进制数转换成10进制 MOV B,#10 10进制/10=10进制DIV ABMOV B_BIT,A 十位在AMOV A_BIT,B 个位在BMOV DPTR,#NUMTAB 指定查表启始地址 MOV R1,#250 显示1000次 MOV A,A_BIT 取个位数MOVC A,A+DPTR 查个位数的7段代码MOV P0,A 送出个位的7段代码CLR P2.4 开个位显示ACALL D1MS 显示1MSSETB P2.4MOV A,B_BIT 取十位数MOVC A,A+DPTR 查十位数的7段代码MOV P0,A 送出十位的7段代码CLR P2.5 开十位显示SETB P2.5DJNZ R1,DPLOP 100次没完循环DJNZ R0,DPL1 4个100次没完循环 MOV R7,#80
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1