基于89C51的电子密码锁设计(汇编的程序).doc_第1页
基于89C51的电子密码锁设计(汇编的程序).doc_第2页
基于89C51的电子密码锁设计(汇编的程序).doc_第3页
基于89C51的电子密码锁设计(汇编的程序).doc_第4页
基于89C51的电子密码锁设计(汇编的程序).doc_第5页
免费预览已结束,剩余14页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

综合电子系统实习 电子密码锁设计 作者:作者:marcomarco QQ:760298923QQ:760298923 1 目录目录 第一章 方案论证.2 1.1 单片机系统方案 .2 第二章 硬件设计.3 2.1 硬件功能框图 .3 2.2 电路的功能单元设计 .3 2.2.1 单片机模块电路 .3 2.2.2 电源模块电路 .4 2.2.3 显示模块电路 .4 2.2.4 按键模块电路 .5 2.2.5 密码正确指示模块部分 .5 2.2.6 报警模块电路 .5 2.2.7 AT24C02 部分电路原理图 .6 2.3PCB 及软件 3D 效果图 .6 2.4 小结.7 第三章 软件设计.7 3.1 系统软件总体设计.7 3.2 模块介绍.7 3.2.1 主程序模块 .7 3.2.2 键盘扫描及识别子程序 .7 3.2.3 掉电存储服务程序 .7 3.2.4 显示子程序 .8 第四章 实物制作及调试说明.9 4.1 实物的制作 .9 4.2 调试说明 .9 第五章 使用说明书.10 附录 1 元件清单 .10 附录 2 程序清单 .11 2 第一章 方案论证 1.1 单片机系统方案 采用 AT89S52 为核心的单片机实现密码锁控制的方案。 利用单片机灵活的编程设计和丰富的 IO 端口,及其控制的准确性,能实现基本的密码 锁功能。在该实验中共设了 16 个按键(09、AF) ,其中 15 个为有效按键,按键“C”为干 扰按键,按下干扰按键,键盘输入电路自动清零。其原理方框图如图 11 所示。 图 1-1 单片机控制方案原理框图 AT89S52 是一种低功耗、高性能 CMOS8 位微控制器,具有 8K 在系统可编程 Flash 存 储器。使用 Atmel 公司高密度非 易失性存储器技术制造,与工业 80C51 产品指令和引脚 完 全兼容。片上 Flash 允许程序存储器在系统可编程,亦适于 常规编程器。在单芯片上, 拥有灵巧的 8 位 CPU 和在系统 可编程 Flash,使得 AT89S52 为众多嵌入式控制应用系统 提供高灵活、超有效的解决方案。 LED 显示开锁显示开锁 AT89S52 单片机单片机 LCD 显示电路显示电路 矩阵矩阵 键盘键盘 控制控制 输入错误三次锁定键盘输入错误三次锁定键盘 复位电路及晶振复位电路及晶振 报警控制电路报警控制电路 密码存储电路密码存储电路 3 第二章 硬件设计 2.1 硬件功能框图 电路原理图如下: 图 2-1 密码锁控制电路原理图 2.2 电路的功能单元设计 2.2.1 单片机模块电路 图 2-2 单片机原理图 4 图 2-3 外部晶振电路 图 2-4 复位电路 2.2.2 电源模块电路 图 2-5 电源模块电路原理图 此电源模块作用是向系统的各部件提供稳定的工作电压,让各部件能够正常工作。 2.2.3 显示模块电路 单片机系统的输出显示部分,选用 1602LCD16 脚带背光液晶屏,基控制器为 HD44780。显示容量:162 个字符 芯片工作电压:4.55.5V 工作电流:2.0mA(5.0V) 模块最 佳工作电压:5.0V 字符尺寸:2.954.35(WH)mm 。1602 液晶显示模块是一种专门用于显 示字母、数字、符号等点阵式 LCD。1602 液晶模块的读写操作、屏幕和光标的操作都是通 过指令编程来实现的。 VSS 1 VDD 2 VL 3 RS 4 R/W 5 EN 6 D0 7 D1 8 D2 9 D3 10 D4 11 D5 12 D6 13 D7 14 BL+ 15 BL_ 16 J1 16*2 +5V a b c d e fg EN RW RS h R P4 POT2 +5V 1 2 3 4 5 6 7 8 9 J3 10K +5v R P5 POT2abcdefgh 图 2-6 显示模块原理图 5 2.2.4 按键模块电路 按键作为单片机系统人机交换的输入部分有独立式按键和行列式按键之分。独立式按键 就是一个按键占用单片机的一个 I/O 口,在程序中就可以通过对相应 I/O 口的电平状态的检 测来判断按键是否按下。独立式按键的程序简单,但是一个按键需要占用一个 I/O 口。因此 在需要按键数量多,I/O 口资源紧张的情况下,通常使用行列式键盘(也叫矩阵键盘) 。行列 式键盘通过对行线和列线的电平状态的组合来判断哪个键被按下,它的程序相对复杂。由于 本系统需要的按键数量多,因此采用 44 的行列式按键。在单片机的 P1 口连接一个 44 的行列式键盘。 图 2-7 键盘模块原理图 2.2.5 密码正确指示模块部分 D2 LED Q1 9014 1 1 2 2 3 3 4 4 5 5 6 6 Kk RELAY-DPST R7 1K VCC +5v P1.1 R12 1.5K 图 2-8 密码正确指示模块电路原理图 当输入的密码正确,绿色发光二极管亮,表示开锁;灭,表示没有开锁。 2.2.6 报警模块电路 此模块中的蜂鸣器,其中一个功能是用来指示操作的按键是否在成功的按下;另外一个 功能是当用户输入密码错误的次数超过了 3 次,蜂鸣器鸣笛报警,键盘处于锁定状态。 6 D1 LS1 SPEAKER R8 560 P1.0 P1.2 Q2 9014 +5v R9 220 图 2-9 报警模块电路原理图 2.2.7 AT24C02 部分电路原理图 AT24C02 的 1,2,3 脚是三条地址线,用于确定芯片的硬件地址。它们都接地。第 8 脚和 第 4 脚分别为电源和地。第 5 脚 SDA 为串行数据输入/输出,数据通过这条双向 I2C 总线串行 传送,与 AT89S52 单片机的 P1.4 连接。第 6 脚 SCL 为串行时钟输入线, 与 AT89S52 单片机的 P1.3 连接。SDA 和 SCL 都需要和正电源间各接一个 5.1K 的电阻上拉。第 7 脚接地。图 2-8 是 AT24C02 部分电路原理图。 A1 2 A3 3 SDA 5 SCL 6 WP 7 8 1 VCC GND A0 1 U1 24C02 VCC R10 5.1K R11 5.1K P1.3 P1.4 图 2.10 AT24C02 部分电路原理图 AT24C02 中带有片内地址寄存器。每写入或读出一个数据字节后,该地址寄存器自动加 1,以 实现对下一个存储单元的读写。所有字节均以单一操作方式读取。为降低总的写入时间,一 次操作可写入多达 8 个字节的数据。 2.3PCB 及软件 3D 效果图 图 2.11 PCB 图及 Altium Designer 3D 图 7 2.4 小结 本章详细叙述了电子密码锁系统硬件电路的结构,分析了各个硬件电路的工作原理。在 设计硬件电路的同时,充分考虑将软件和硬件结合起来,发挥单片机的智能化优势。简化硬 件电路的设计,提高硬件电路的可靠性和稳定性。 第三章 软件设计 软件是整个控制系统设计的核心,它具有充分的灵活性,可以根据系统的要求而变化。 在硬件结构一定的情况下,只要改变软件就能实现一些不同的功能。单片机所具有的智能功 能要由软件来完成。 3.1 系统软件总体设计 系统上电后首先完成初始化工作,然后按照事先设定好的程序执行。本系己程序是基于 单任务机制的。这种机制的应用程序是一个无限的循环,在这循环的过程中调用相应的子程 序函数来完成相应的操作。这种机制具有简单直观,易于控制的优点。 在本系统中,软件结构应采用模块化设计方法,主要包括主程序,键盘程序,密码比较 模块,密码修改程序等等。上电复位后,初始化各端口,标志位和有关寄存器,接着从 AT24C02 中读入密码,然后开始检测键盘是否有输入,如没有就不断检测,如果有输入就转 到相应处理程序。 3.2 模块介绍 该计程计价系统的软件设计分为以下几个模块: 3.2.1 主程序模块 主程序主要完成初始化、设置中断向量、检查有无按键按下、以及调用显示等等。主程 序的流程图如下图 3-1 所示。 3.2.2 键盘扫描及识别子程序 键盘采用查询的方式,放在主程序中,当没有按键按下的时候,单片机循环主程序,一 旦有按键按下,便转向相应的子程序处理,处理结束再返回。其程序流程如图 3-1 所示. 3.2.3 掉电存储服务程序 当比较密码的时候,需要读 AT24C02 程序,将存储在芯片内的数据读到 RAM 中,然 后和输入的密码相比较。当修改密码的时候,需要把输入的密码保存到 AT24C02 中,其程 8 序流程如图 3-2 所示. 3.2.4 显示子程序 由于是分屏显示数据,所以就要用到 5 个显示子程序,分别是:关闭状态显示子程序、 开锁状态显示子程序、密码输入及修改状态显示子程序、密码输入错误后的提示子程序。密 码在规定的时间内输入错误次数超过 3 次后的锁定状态显示子程序. 程序流程图如 3-1、3-2 所示: 开始 初始化 有键按下? 调用显示 启动定时 识别按键 全部按完? 超时? 比较密码 开门 开始 自动清除 3 次? 锁定 N N Y Y Y Y N N 按下 F 启动定时 输入密码 存入缓冲 再输入一次 比较密码 调用 24C02 调用显示 按 F 退出 Y 重新输入 N 图 31 主程序流程图 图 32 修改密码流程 图 程序清单如附录二所示。 9 第四章 实物制作及调试说明 4.1 实物的制作 1、用 Protell99、Altuim Designer 6.9 软件,从原理图导 PCB 图。 2、将 PCB 图打印到热转印纸上。 3、用钢锯裁减覆铜板到所需大小,用木工细纱纸擦干净覆铜板表面,把打印好的转印纸有 字的一面平铺在其上面。 4、先加热塑机,将包装好的铜板通过热塑机,等板子冷了之后将纸撕掉,就可以看见完整 的电路图了。 5、用三氯化铁溶液进行腐蚀,用开水来溶化三氯化铁,在反应过程中,用开水来维持温度, 不断地加快它的腐蚀速度。 打印机软件 6 6、腐蚀完成后,拿开,冲洗干净,接着擦干。 7、钻孔。 8、用木工细纱纸打磨,把铜线上的墨粉除去,并擦干净。 9、按照装配图把各元器件焊好在电路板上。 4.2 调试说明 硬件调试: 1、对样机加电,电源指示灯亮,说明电源部分无短路。样机所用的 9V 电源,经测量, 其电压值,符合要求。 2、根据硬件电气原理图和装配图,检查了样机线路正确,元器件的型号、规格和安装 符合要求。 3、在不插入 AT89S51 芯片的情况下,对样机各插件上的引脚的电压进行了测量,大部 分正常,少数由于虚焊所致,断电、重焊、再测,达到要求。 软件调试: 1、利用伟福软件对所用的程序进行编辑,编译及其调试。 2、有错,修改,再编译,成功。 3、将调试成功的程序烧写到 AT89S51 中去。 软、硬件结合调试: 1、输入原密码为 123456,开锁。 2、设置新密码 654321,返回重新进入,开锁。 3、输入三次不正确密码,密码锁锁死。 10 第五章 使用说明书 1、本样机使用六位数字作为密码,有设置密码功能。 2、本样机原始密码为 123456,当上电开机后,液晶显示会出现设置密码和开锁的选择项。 3、在没有按下设置密码键“A”或开锁键“B”的时候,红色发光二极管闪烁,提示要进行 操作。 4、按相应的键进入执行功能,当按下设置密码键“A”时,显示会提示输入原始密码,输入 密码正确后,进行输入新密码,输入一次新密码后,显示会提示再次输入新密码,以确 认新密码是否输入正确。 5、设置新密码完毕后,系统会返回到初始开机界面,显示设置密码或开锁的选择项。 6、当按下开锁键“B”时,显示会输入密码提示。输入密码正确后,显示密码正确 OK,系 统启动继电器,绿色发光二极管亮。 7、当在开锁状态下,按下关锁键“F” ,系统关闭继电器,绿灯灭。系统返回开机时的界面。 8、当在输入数字时,不小心输入数字错误,可以按下菜单键“F” ,返回到初始将要输入数 字的状态。 9、本机设置了密码保护功能,当输入三次密码不正确后,密码锁锁死,不能再开锁,同时 蜂鸣器发出响声警告。只有在复位情况下或断电关机后重新开机才可以输入密码、开锁 或设置密码。 10、当输入密码错误的时,显示出密码错误提示,发光二极管亮,蜂鸣器发出长警告声,系 统自动返回输入密码状态后,红色发光二极管灭,蜂鸣器停止响,系统显示输入密码提 示。 附录 1 元件清单 元器件名称大小和型号数量 芯片(加底座) AT89S52 各 1 EEPROM(加底座) AT24C02 各 1 三端稳压管 78051 LCD 显示器1620 液晶 1 继电器5V、6 脚 1 蜂鸣器 BELL1 晶振 12MHZ1 三极管 90142 电源座带插头 1 电位器 10K1 10K4 电阻 1K4 11 2001 10k 排阻 1 30p2 0.01 电解电容 1 100 电解电容 1 电容 22 电解电容 1 发光二极管 23 单排针20 口 2 按键4 脚 17 拨动开关5 脚 1 附录 2 程序清单 EN BIT P3.0; RW BIT P3.1; RS BIT P3.2; DISPLAY EQU P0; SPEAKER BIT P1.0; LED BIT P1.2; OPEN BIT P1.1; RETURNBIT BIT 20H.1; ;密码缓冲区 PS1 EQU 46H PS2 EQU 47H PS3 EQU 48H PS4 EQU 49H PS5 EQU 4AH PS6 EQU 4BH ;AT24C02 读取缓冲区 REDY AT1 EQU 34H AT2 EQU 35H AT3 EQU 36H AT4 EQU 37H AT5 EQU 38H AT6 EQU 39H SDA BIT P1.4 ;定义串口数据端 SCL BIT P1.3 ORG 0000H; LJMP START; ORG 000BH; LJMP INTERMIT_T0; ORG 001BH; LJMP INTERMIT_T1; ORG 0030H; START: MOV SP,#60H; LCALL SYS_INITIALIZATION; ;主程序 MAIN0: LCALL STRAT_DISPLAY; MAIN: MOV 52H,#0; 52H 判断输入错误次数储存地址 SETB LED; SETB TR0; LCALL KEY; CJNE A,#A,NEXT1; LJMP SET_PASSWORD; NEXT1: CJNE A,#B,NEXT2; LJMP INPUT_PASSWORD; NEXT2: AJMP MAIN; ;系统初始化 SYS_INITIALIZATION: CLR LED; CLR OPEN; CLR SPEAKER; LCALL AT_RADE; ;MOV A,34H; ;CJNE A,#31H,LIKE; AJMP LIKE; MOV 34H,#1; MOV 35H,#2; MOV 36H,#3; MOV 37H,#4; MOV 38H,#5; MOV 39H,#6; MOV 46H,34H; 13 MOV 47H,35H; MOV 48H,36H; MOV 49H,37H; MOV 4AH,38H; MOV 4BH,39H; LCALL AT_WR; ;存放初始密码 LIKE: MOV R7,#12; MOV R0,#40H; LOOP: MOV R0,#00H; INC R0; DJNZ R7,LOOP; ;密码键值存放区清零完毕 LCALL DELAY0_1S; MOV P0,#03H; CALL WRITE_INSTRUCTION; 液晶软复位 MOV P0,#01H; CALL WRITE_INSTRUCTION; MOV P0,#3FH; CALL WRITE_INSTRUCTION; MOV P0,#0FH; CALL WRITE_INSTRUCTION; MOV P0,#06H; CALL WRITE_INSTRUCTION; ;液晶初始化完毕 MOV R4,#10; MOV TMOD,#11H; MOV TH0,#3CH; MOV TL0,#0B0H; SETB EA; SETB ET0; ;定时器 T0,0.5S 定时中断初始化完毕 RET; ;系统初始化完毕 ;中断服务程序 INTERMIT_T0: PUSH ACC; PUSH PSW; MOV TH0,#3CH; MOV TL0,#0B0H; DJNZ R4,RETURN; CPL LED; MOV R4,#10; RETURN: POP PSW; POP ACC; RETI; INTERMIT_T1: PUSH ACC; PUSH PSW; MOV TH1,#9EH; MOV TL1,#58H; DJNZ R4,RETURN_T1; CPL LED; CPL SPEAKER; MOV R4,#10; RETURN_T1:POP PSW; POP ACC; RETI; ;键盘扫描 KEY: CALL KS; JNZ K1; JMP KEY; K1: CALL DELAY; CALL KS; JNZ K2; JMP KEY; K2: CLR TR0; CLR LED; MOV R2,#0FEH; MOV R6,#00H; K3: MOV A,R2; MOV P2,A; MOV A,P2; JB ACC.4,L1; MOV A,#0; LJMP LK; L1: JB ACC.5,L2; MOV A,#4; LJMP LK; L2: JB ACC.6,L3; MOV A,#8; LJMP LK; L3: JB ACC.7,NEXT_KEY; MOV A,#12; LK: ADD A,R6; MOV R6,A; K4: CALL KS; JNZ K4; MOV A,R6; MOV DPTR,#TABLE0; MOVC A,A+DPTR; MOV 50H,A; 查表取值存入 50H,保护键值 RET; 14 NEXT_KEY: INC R6; MOV A,R2; JNB ACC.7,KEY; RL A; MOV R2,A; JMP K3; ; KS: MOV P2,#0F0H; MOV A,P2; XRL A,#0F0H; RET; ;设置密码程序 SET_PASSWORD: CALL CLEAR_DISPLAY; MOV DPTR,#TABLE4; CALL INPUT_HINT; MOV R0,#40H; CALL PASSWORD; JBC RETURNBIT,SET_PASSWORD; ;先输入原密码完毕 MOV R5,#6; MOV R0,#40H; MOV R1,#34H; INPUT_COMPERE: MOV A,R0; XRL A,R1; JNZ INPUT_ERROR; INC R0; INC R1; NOP; NOP; DJNZ R5,INPUT_COMPERE; ;验证输入密码完毕 JMP SET_PASSWORD0; INPUT_ERROR: SETB SPEAKER; SETB LED; CALL CLEAR_DISPLAY; MOV DPTR,#TABLE5; CALL INPUT_HINT; CALL DELAY1_5S; CLR SPEAKER; CLR LED; INC 52H; MOV A,52H; CJNE A,#3,SET_PASSWORD; SJMP $; ;输入密码错误次数超过 3 次,锁死 SET_PASSWORD0: CALL CLEAR_DISPLAY; MOV DPTR,#TABLE2; CALL INPUT_HINT; MOV R0,#40H; CALL PASSWORD; JBC RETURNBIT,SET_PASSWORD; ;第一次输入新密码完毕 CALL CLEAR_DISPLAY; MOV DPTR,#TABLE3; CALL INPUT_HINT; CALL DELAY1_5S; ;显示再次输入新密码完毕 CALL CLEAR_DISPLAY; MOV DPTR,#TABLE4; CALL INPUT_HINT; MOV R0,#46H; CALL PASSWORD; JBC RETURNBIT,SET_PASSWORD; ;第二次输入新密码完毕 MOV R5,#6; MOV R0,#40H; MOV R1,#46H; SET_COMPERE: MOV A,R0; XRL A,R1; JNZ SET_ERROR; INC R0; INC R1; DJNZ R5,SET_COMPERE; MOV 34H,40H; MOV 35H,41H; MOV 36H,42H; MOV 37H,43H; MOV 38H,44H; MOV 39H,45H; ;存入新密码完毕 LCALL AT_WR; JMP MAIN0; ;设置新密码成功,返回主程序 SET_ERROR: SETB SPEAKER; SETB LED; CALL CLEAR_DISPLAY; 15 MOV DPTR,#TABLE5; CALL INPUT_HINT; CALL DELAY1_5S; CLR SPEAKER; CLR LED; LJMP SET_PASSWORD0; ;前后两次输入新密码不一致,返回重设 ;输入密码开锁程序 INPUT_PASSWORD: CALL CLEAR_DISPLAY; MOV DPTR,#TABLE4; CALL INPUT_HINT; MOV R0,#40H; CALL PASSWORD; JBC RETURNBIT,INPUT_PASSWORD; ;输入原密码完毕 MOV R5,#6; MOV R0,#40H; MOV R1,#34H; INPUT_COMPERE0: MOV A,R0; XRL A,R1; JNZ INPUT_ERROR22; INC R0; INC R1; NOP; NOP; DJNZ R5,INPUT_COMPERE0; ;验证输入密码完毕 JMP DISPLAY_RIGHT; INPUT_ERROR22: SETB SPEAKER; SETB LED; CALL CLEAR_DISPLAY; MOV DPTR,#TABLE5; CALL INPUT_HINT; CALL DELAY1_5S; CLR SPEAKER; CLR LED; INC 52H; MOV A,52H; CJNE A,#3,INPUT_PASSWORD; SJMP $; ;输入密码错误超过 3 次,锁死 DISPLAY_RIGHT: CALL CLEAR_DISPLAY; MOV DPTR,#TABLE6; CALL INPUT_HINT; ;显示输入密码正确提示完毕 SETB OPEN; 开锁 NEXT_KEY1:CALL KEY; NOP; NOP; CJNE A,#F,NEXT_KEY1; CLR OPEN; 按下关锁键,关锁 JMP MAIN0; 返回主程序 ; STRAT_DISPLAY: MOV P0,#80H; CALL WRITE_INSTRUCTION; MOV DPTR,#TABLE1; CALL INPUT_HINT; MOV P0,#0C0H; CALL WRITE_INSTRUCTION; MOV DPTR,#TABLE11; CALL INPUT_HINT; RET; CLEAR_DISPLAY: MOV DISPLAY,#01H; CALL WRITE_INSTRUCTION; MOV P0,#06H; CALL WRITE_INSTRUCTION; RET; INPUT_HINT: MOV R5,#16; MOV A,#00H; ALL_OR_NOT: MOVC A,A+DPTR; MOV DISPLAY,A; CALL WRITEDATA; INC DPTR; CLR A; NOP; NOP; DJNZ R5,ALL_OR_NOT; RET; PASSWORD: MOV R5,#6; MOV R1,#0C0H; 16 MOV A,R1; MOV P0,A; CALL WRITE_INSTRUCTION; LOOP1: CALL KEY; NOP; NOP; CJNE A,#C,NEXT_TO; SETB RETURNBIT; JMP ENDT; NEXT_TO: MOV A,50H; MOV R0,A; MOV DISPLAY,A;A; CALL WRITEDATA; INC R1; INC R0; DJNZ R5,LOOP1; ENDT: RET; ;写数据指令 WRITEDATA: SETB RS; CLR RW; CLR EN; SETB EN; NOP; NOP; CLR EN; CALL DELAY; RET; ;写指令 WRITE_INSTRUCTION: CLR RS; CLR RW; CLR EN; SETB EN; NOP; NOP; CLR EN; CALL DELAY; RET; ; ;* * ;* 24C02 读写程序 ;* * AT_RADE:PUSH PSW PUSH ACC MOV R0,#AT1 ;CPU 首地址 MOV R6,#06H ;8 字节 MOV R5,#08H ;8 位 MOV R7,#00H ;24C02 首地址 LCALL READ ;读数据 NOP NOP POP ACC POP PSW RET AT_WR: PUSH PSW PUSH ACC MOV R0,#PS1 ;CPU RAM 首地址,密码缓冲区 MOV R6,#06H ;8 字节 MOV R5,#08H ;8 BIT MOV R7,#00H ;24C02 RAM 首地址 LCALL WRT ;先写进 NOP NOP POP ACC POP PSW RET ;- ;读串行器件 R0:RAM 的起始地址,R5:位计数器, ;R6:读的字节数,R7:读的起始地址 READ:NOP NOP LCALLSTART0 MOVA,#0A0H LCALLWRB LCALLCHK JBF0,RD_FAIL MOVA,R7 LCALLWRB LCALLCHK JBF0,RD_FAIL LCALLSTART0 MOVA,#0A1H LCALLWRB LCALLCHK JBF0,RD_FAIL RD_N:NOP NOP 17 LCALLRDB MOVR0,A DJNZ R6,GO_ACK LCALLN_ACK RD_FAIL:NOP LCALLSTOP MOVA,#0FFH RET;*READ GO_ACK:NOP NOP INCR0 LCALLACK JMPRD_N ;写串行器件 R0:RAM 的起始地址,R5:位计数器, ;R6:写的字节数(页),R7:写的起始地址 WRT: NOP NOP LCALLSTART0 MOVA,#0A0H LCALLWRBYT LCALLCHK JBF0,WR_FAIL MOVA,R7 LCALLWRBYT LCALLCHK JBF0,WR_FAIL WR_N:NOP NOP MOVA,R0 LCALLWRBYT LCALLCHK JBF0,WR_FAIL INCR0 DJNZ R6,WR_N WR_FAIL:NOP LCALLSTOP MOVA,#0FFH RET;*WRT ;- START0:NOP ;启动信号子程序 NOP SETB SDA SETB SCL NOP NOP CLRSDA NOP NOP CLRSCL NOP RET ;- STOP:NOP ;终止信号子程序 NOP CLRSDA SETB SCL NOP NOP SETB SDA NOP NOP CLRSCL NOP RET ;- ACK: NOP ; 发送应答子程序 NOP CLRSDA SETB SCL NOP NOP CLRSCL SETB SDA NOP RET ;- N_ACK:NOP ;发送非应答子程序 NOP SETB SDA SETB SCL NOP NOP CLRSCL CLRSDA NOP RET ;- CHK: NOP NOP SETB SDA NOP NOP 18 SETB SCL NOP NOP MOVC,SDA MOVF0,C CLRSCL NOP NOP RET

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论