📄 sx.asm
字号:
; 正常状态时为低 一次输出12比特间隔5MS输出四次
; 单比特输出为高低高低 0 短时间输出 1 长时间输出
; 悬空为0110 高电平为1010 低电平为0101
; 当前密码位状态为 悬空为01 高电平为11 低电平为00
; 合闸D3(A9) 分闸D2 闭锁D1 解锁D0
; 发送时A0在前A11在后
; 定时器时间为短时间输出时间
; 振荡频率 F=1000*16/Rosc(kΩ)kHz 其中Rosc为振荡电阻
; Rosc=3.3MΩ,T=359US Rosc 采用了1.5M 的电阻振荡频率约为T=165US 315 210us
; 短时间=T=4/F 长时间=3T
; 一组位码构成字码,字码由12个位码紧跟一个同步码构成。
; A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 SYNC
; SYNC 高T低31A
;PCONA 电源控制寄存器A
;0 CCUPD 比较/捕获单元(CCU)掉电:该位为1 时,CCU 的内部时钟被禁止。注:如果
;在掉电或完全掉电模式下,不管该位的状态如何,CCU 时钟将被禁能(注:
;使用CCUDIS 位时,该位无效。若CCUDIS=1,CCU 处于掉电)。
;1 SPD 串口(UART)掉电:该位为1 时,UART 的内部时钟被禁止。注:如果处
;于掉电或完全掉电模式下,不管该位的状态如何,UART 时钟都将会被禁止。
;2 SPPD SPI 掉电:该位为1 时,SPI 的内部时钟被禁止。注:如果处于掉电或完全
;掉电模式下,不管该位的状态如何,SPI 时钟都将会被禁止。
;3 I2PD I2C 掉电:该位为1 时,I2C 总线的内部时钟被禁止。注:如果处于掉电或完
;全掉电模式下,不管该位的状态如何,I2C 时钟都将会被禁止。
;4 ADPD A/D 转换器掉电:该位为1 时,关闭ADC 的时钟。如果要使ADC 完全掉电,
;用户还必须置位寄存器ADCON1 和ADCON0 中的位ENADC1 和ENADC0。
;5 VCPD 模拟电压比较器掉电:该位为1 时,电压比较器掉电。用户必须在置位该位
;之前禁止电压比较器。
;6 DEEPD 数据EEPROM 掉电:当该位为1 时,数据EEPROM 掉电。注:如果处于掉
;电或完全掉电模式下,不管该位的状态如何,数据EEPROM 都将会掉电。
;7 RTCPD 实时时钟掉电:该位为1 时,用于实时时钟的内部时钟被禁止。
;TMOD 定时器/计数器模式寄存器
;0 T0M0 定时器0 的工作模式选择器。这些位和TAMOD 寄存器的T0M2
;1 T0M1 位一起来决定定时器0 的工作模式。
;2 T0C/ T 定时器0 的定时或计数功能选择。该位清零时定时器0 用作定时功能(从
; CCLK 输入脉冲);该位置位时定时器0 用作计数功能(从T0 脚输入脉冲)。
;3 T0GATE 定时器0 的门控位。该位被置位时,仅当INT0 脚为高电平且TR0 控制位
; 被置位时使能定时器/计数器;该位被清零时,TR0 控制位被置位时使能定时器0。
;4 T1M0 定时器1 的工作模式选择。这些位和TAMOD 寄存器的T1M2 位一起来决
;5 T1M1 定定时器1 的工作模式
;6 T1C/ T 定时器1 的定时或计数功能选择。该位清零时定时器1 用作定时功能(从
; CCLK 输入脉冲);该位置位时定时器1 用作计数功能(从T1 脚输入脉冲)。
;7 T1GATE 定时器1 的门控位。该位被置位时,仅当INT1 脚为高电平且TR1 控制位
; 被置位时使能定时器/计数器;该位被清零时,TR1 控制位被置位时使能定时器1
;TAMOD
;0 T0M2 定时器0 的工作模式选择。这些位与TAMOD 寄存器的位T0M2 一起来决
; 定定时器0 的工作模式。
;4 T1M2 定时器1 的工作模式选择。这些位与TAMOD 寄存器的位T1M2 一起来决
; 定定时器1 的工作模式。
; 下列定时器模式由定时器模式位TnM[2:0]选择:
;000 8048 定时器“TLn”用作5 位预分频器(模式0)。
;001 16位定时器/计数器“THn”和“TLn”级联;无预分频器(模式1)。
;010 8 位自动重装定时器/计数器。溢出时THn 的内容装入TLn(模式2)。
;011 该模式下定时器0 用作2 个8 位的定时器/计数器。TL0 用作一个8
; 位的定时器/计数器,由标准定时器0 控制位来控制。TH0 只可用作
; 一个8 位的定时器,由定时器1 的控制位来控制(见文中描述)。该
; 模式下定时器1 关闭(模式3)。
;TCON 定时器0 和1 控制
;0 IT0(88H)中断0 类型控制位。由软件置位/清零以选择外部中断以下降沿/低电平方式触发。
;1 IE0 中断0 边沿标志。当检测到外部中断0 边沿时由硬件置位该标志。中断处理
; 时由硬件清零,或通过软件清零。
;2 IT1 中断1 类型控制位,由软件置位/清零以选择外部中断以下降沿/低电平方式触发。
;3 IE1 中断1 边沿标志。当检测到外部中断1 边沿时由硬件置位该标志。中断处理
; 时由硬件清零,或通过软件清零。
;4 TR0 定时器0 运行控制位。通过软件将其置位/清零来起动/关闭定时器/计数器0。
;5 TF0 定时器0 溢出标志。定时器/计数器溢出时由硬件置位。中断执行时硬件清零,
; 或由软件清零(硬件清零时,模式6 不同)。
;6 TR1 定时器1 运行控制位。通过软件将其置位/清零来起动/关闭定时器/计数器1。
;7 TF1 定时器1 溢出标志。定时器/计数器溢出时由硬件置位。中断执行时硬件清零,
; 或由软件清零(硬件清零时,模式6 不同,见以上有关模式6 的描述)。
;RTCCON 实时时钟控制寄存器
;0 RTCEN 实时时钟使能。如果该位为1,实时时钟使能。注:该位不会使实时时钟进入掉
; 电状态。不管RTCEN 的状态如何,RTCPD (PCONA.7)为1 时会使实时时钟进入
; 掉电,并且禁止该模块。
;1 ERTC 实时时钟中断使能。实时时钟和看门狗定时器共用一个中断向量。注:如果用户
; 配置位WDTE(UCFG1.7)为0,看门狗定时器可使能为产生中断。用户可读取
; RTCF(RTCCON.7)位以确定中断是否由实时时钟产生。
;5 RTCS0
;6 RTCS1
; 实时时钟源选择(见表40)
;7 RTCF 实时时钟标志。当23 位实时时钟到达计数值0 时,该位置位。该位可通过软件清零。
;FMCON 表110 Flash 存储器控制寄存器
;0 OI R 操作被中断。由于中断或复位而使擦除-编程终止时该位置位。
; FMCMD.0 W 命令字节位0。
;1 SV R 安全出错。试图对加密扇区或页进行编程、擦除或CRC 校验时该位置位。
; FMCMD.1 W 命令字节位1。
;2 HVE R 高电压错误。高电压发生器出错时该位置位。
; FMCMD.2 W 命令字节位2。
; HVA R 高电压终止。当在编程或擦除周期内检测到中断或掉电时以及在编程或擦
; 除周期开始时掉电检测被禁止置位该位。
;3 FMCMD.3 W 命令字节位3。
;4:7 - R 保留。
;4:7 FMCMD.4 W 命令字节位4。
;4:7 FMCMD.5 W 命令字节位5。
;4:7 FMCMD.6 W 命令字节位6。
;4:7 FMCMD.7 W 命令字节位7。
; 中断汇总
;描述 中断标志位 中断向量地址 中断使能位 中断优先级仲裁顺序 掉电唤醒
;外部中断0 IE0 0003H EX0(IEN0.0) IP0H.0,IP0.0 1(最高) √
;定时器0中断 TF0 000BH ET0(IEN0.1) IP0H.1,IP0.1 4
;外部中断1 IE1 0013H EX1(IEN0.2) IP0H.2,IP0.2 7 √
;定时器1中断 TF1 001BH ET1(IEN0.3) IP0H.3,IP0.3 10
;串口Tx和Rx TI&RI
;串口Rx RI 0023H ES/ESR(IEN0.4) IP0H.4,IP0.4 13
;掉电检测 BOF 002BH EBO(IEN0.5) IP0H.5,IP0.5 2 √
;看门狗定时器/
;实时时钟 WDOVF/RTCF 0053H EWDRT(IEN0.6) IP0H.6,IP0.6 3 √
;I2C 总线中断 SI 0033H EI2C(IEN1.0) IP0H.0,IP0.0 5
;KBI 中断 KBIF 003BH EKBI(IEN1.1) IP0H.0,IP0.0 8 √
;比较器1/2中断 CMF1/CMF2 0043H EC(IEN1.2) IP0H.0,IP0.0 11 √
;SPI中断 SPIF 004BH ESPI(IEN1.3) IP1H.3, IP1.3 14
;捕获/比较单元 005BH ECCU(IEN1.4) IP1H.4, IP1.46
;串口Tx TI 006BH EST(IEN1.6) IP0H.0,IP0.0 12
; PxM1.Y PxM2.Y 口输出模式
; 0 0 准双向口
; 0 1 推挽
; 1 0 仅为输入(高阻)
; 1 1 开漏
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
AUXR1 EQU 0A2H ;辅助功能寄存器 00H
DIVM EQU 095H ;CPU时钟分频控制 00H
IEN0 EQU 0A8H ;中断使能0 00H
IEN1 EQU 0E8H ;中断使能1 00H
IP0 EQU 0B8H ;中断优先级0 00H
IP0H EQU 0B7H ;中断优先级0高字节 00H
IP1 EQU 0F8H ;中断优先级1 00H
IP1H EQU 0F7H ;中断优先级1 高字节 00H
P0M1 EQU 084H ;0口输出模式选择1 FFH
P0M2 EQU 085H ;0口输出模式选择2 00H
P1M1 EQU 091H ;1口输出模式选择1 FFH
P1M2 EQU 092H ;1口输出模式选择2 00H
P2M1 EQU 0A4H ;2口输出模式选择1 FFH
P2M2 EQU 0A5H ;2口输出模式选择2 00H
P3M1 EQU 0B1H ;3口输出模式选择1 03H
P3M2 EQU 0B2H ;3口输出模式选择2 00H
;PCON EQU 087H ;电源控制寄存器 00H
PCONA EQU 0B5H ;电源控制寄存器A 00H
RSTSRC EQU 0DFH ;复位源寄存器 30H
TAMOD EQU 08FH ;定时器0和1附加模式
TRIM EQU 096H ;内部振荡调整寄存器
WDCON EQU 0A7H ;看门狗控制寄存器
WDL EQU 0C1H ;看门狗装载 FFH
WFEED1 EQU 0C2H ;看门狗清零
WFEED2 EQU 0C3H ;看门狗清零
PT0AD EQU 0F6H ;P0口数字输入禁能
FMCON EQU 0E4H ;Flash 存储器控制寄存器
FMDATA EQU 0E5H ;编程Flash 数据
FMADRL EQU 0E6H ;编程Flash 地址低字节
FMADRH EQU 0E7H ;编程Flash 地址高字节
RTCCON EQU 0D1H ;实时时钟控制寄存器
;PCON EQU 087H ;电源控制
;SCON EQU 098H ;串口(UART)控制
;SBUF EQU 099H ;串口(UART)数据缓冲器
SADDR EQU 0A9H ;串口(UART)地址
SADEN EQU 0B9H ;串口(UART)地址使能
SSTAT EQU 0BAH ;串口(UART)状态
BRGR1 EQU 0BFH ;波特率发生器速率高字节
BRGR0 EQU 0BEH ;波特率发生器速率低字节
BRGCON EQU 0BDH ;波特率发生器控制
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEY_BH_YS EQU 6 ;按键去抖动时间
KEY_DK_YS EQU 6 ;按键释放去抖动时间
FXCS EQU 10 ;无线信号发送次数
SUANG_J_SJ EQU 2 ;长按键有效时间。最大为3 3S
XS_ZKB EQU 07H ;调整显示的亮度。要求满足XS_ZKB=2^N-1 (N=2,3,4,5.....)
;;;;;;;;;;
YK BIT P0.0
LED2 BIT P3.1
LED1 BIT P3.0
LED3 BIT P1.6
LED4 BIT P1.7
DANYUAN BIT P0.2
;;;;;;;;;;;
YS_FX BIT 00H
ERROR BIT 08H ;
YJ BIT 10H
DZ_P BIT 18H
XH_P BIT 20H
KEY_YCL BIT 28H ;按键是否以处理
SX_W1 BIT 30H
SX_W2 BIT 31H
SX_W3 BIT 32H
AJ_YS EQU 28H
AJ_YS_BIT BIT 45H
;;;;;;;;;;;
YS_1 EQU 30H
YS_2 EQU 31H
SJ_DZ EQU 32H
SX_W_X1 EQU 33H
SX_W_X EQU 34H
SX_W EQU 35H ;当前要显示的位
LCD_WZ EQU 36H ;要闪烁的位
MI1 EQU 37H ;要显示的数据
MI2 EQU 38H
MI3 EQU 39H
MI4 EQU 3AH
MIMA11 EQU 3BH
MIMA12 EQU 3CH
MIMA13 EQU 3DH
MIMA14 EQU 3EH
MIMA15 EQU 3FH
MIMA_DPL EQU 40H ;序号
MIMA_DPH EQU 41H
DQ_SJ_L EQU 42H ;地址
DQ_SJ_H EQU 43H
K_SJ_L EQU 44H ;数据的地址
K_SJ_H EQU 45H
ST1 EQU 46H ;按键有效时间
KEY_SC EQU 47H ;上次键值
ST2 EQU 48H ;按键无效时间
HSECOND EQU 4AH ;关机记时
SECOND EQU 4BH
MIMA1 EQU 0C0H ;--F8H
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TRIMER0
ORG 001BH
LJMP TRIMER1
ORG 0100H
MAIN:
NOP
CLR EA
MOV R7,#0
DJNZ R7,$
MOV AUXR1,#080H
MOV DIVM,#6 ;3.25512 T=2*(2N/F)
MOV PCONA,#7FH
MOV R7,#0
DJNZ R7,$
MOV P0M1,#00100000B
MOV P0M2,#00000001B
MOV P1M1,#0
MOV P1M2,#0
MOV P2M1,#00H
MOV P2M2,#0FFH ;推挽
MOV P3M1,#00H
MOV P3M2,#00H
CLR DANYUAN
NOP
CLR DANYUAN
CLR P3.0 ;关LED
CLR P3.1
CLR P1.6
CLR P1.7
MOV P2,#0
CLR YK
MOV R7,#0 ;开机时间2S
MOV R5,#2
MAIN9: MOV R6,#241
MAIN8: DJNZ R7,$
DJNZ R6,MAIN8
DJNZ R5,MAIN9
SETB DANYUAN
NOP
SETB DANYUAN
MOV SP,#83H
MOV PSW,#0
CLR A
MOV R0,#83H
WDY: MOV @R0,A
DJNZ R0,WDY
MOV IP0H,#12H
MOV IP0,#02H
MOV TMOD,#022H ;定时器0模式2,自动重装
MOV TAMOD,#000H ;定时器1模式1,16位定时器
; MOV TH0,#0BFH ;210
MOV TH0,#0C3H ;200
MOV TH1,#066H
SETB TR1
SETB ET1
SETB TR0
CLR ET0
CLR YS_FX
CLR YK
MOV MI1,#00H ;LCD_WZ=0
MOV MI2,#00H ;LCD_WZ=1
MOV MI3,#00H ;LCD_WZ=2
MOV MI4,#00H ;LCD_WZ=3
MOV LCD_WZ,#4
MOV SECOND,#0
MOV HSECOND,#0
CLR ERROR
SETB SX_W1
SETB SX_W2
SETB SX_W3
CLR DZ_P
CLR XH_P
SETB YJ
MAIN1: SETB EA
MOV C,ET1
RLC A
MOV B,A
MOV C,ET0
RLC A
XRL A,B
JB ACC.0,MAIN2
CLR ET0
SETB ET1
CLR TF1
MAIN2: JB ET0,MAIN1
MOV PSW,#0
JNB AJ_YS_BIT,$
NOP
MOV AJ_YS,#0
LCALL KEY_ZHSM
LJMP MAIN1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TRIMER0: PUSH A
PUSH PSW
MOV PSW,#10H
JNB YS_FX,TRIMER0_1
DJNZ SJ_DZ,TRIMER0_END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -