长汀无线电厂交流论坛

 找回密码
 注册
查看: 2797|回复: 8
打印 上一主题 下一主题

使用AT89C2051解码PT2262

[复制链接]
跳转到指定楼层
楼主
发表于 2011-2-10 21:26:55 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 LBQ691477940 于 2011-2-10 21:30 编辑

;使用AT89C2051解码PT2262 晶振11.0592 MHZ
;0-代表接VSS 1-代表接VDD *2代表悬空;通过串口显示出来
;晶体频率为11.0592Mhz
;本程序中的时间定位关系只适用于接3.3M振荡电阻的PT2262解码
;使用其它阻值电阻时,应将定位时间按电阻比例缩放
; P10-- 信号指示灯
; P32-- /315M DATA输入端,通常接LM358的1脚
; 解码后由 P31 送出, 9600 n 8 1, 给串口调试显示

这手不是我的,哈哈!

八位地址悬空时的控键码


;==================================================
;上原程序:
;----------------------------------------------------------------
        TDN  EQU 20H
        TDN1 EQU 21H
        TMP0 EQU 30H
        TMP1 EQU 31H
        BUF1 EQU 40H ;储存 1ST 数据流
        BUF2 EQU 50H ;储存 2ND 据
;-----------------------------------------------------------
        ORG     0000H
        JMP     LAB00
LAB00:
        MOV     SP,#60H
        MOV     A,#0FFH
        MOV     P1,A
        MOV     P3,A
        CALL     DLY01    ;调用延时100MS
;--------------------------------------------------
SETBD:
        MOV     TMOD,#22H ;两个定时器都设为8位自动重装初值
        MOV     TH1,#0FDH ;11.059MHZ 设置波特率为 9600
        SETB     TR1       ;
        MOV     SCON,#01010000B ;设定串列方式 MODE1,接收时 REN=1
        NOP
        MOV     TH0,#0F4H ;定时器0 模式2, 8位自动重装 0.013MS
        CLR     TR0     ;11.0592 = 13 uS
        MOV     IE,#10010000B ;UART中断使能
;--------------------------------------------------
LOOPX:
        SETB     P1.0    ;信号指示灯
        CALL     WSTAT     ;等待 2 同步 (>3.3MS)
        CALL     WSTAT     ;等待 2 同步 (>3.3MS)
        CLR     P1.0    ;信号指示灯
        MOV     R0,#BUF1 ;分解 1ST 数据流
        MOV     R2,#12
LOOPX2:
        CALL     GET2P     ;收到 2 脉冲
        JNC     LOOPX1
        JMP     LOOPX ;失败
LOOPX1:
        MOV     A,B
        MOV     @R0,A
        INC     R0
        DJNZ     R2,LOOPX2
        CALL     WSTAT ;
        MOV     R0,#BUF2 ;分解 2ND 数据流
        MOV     R2,#12
LOOPX3:
        CALL     GET2P ;收到 2 脉冲
        JNC     LOOPX4
        JMP     LOOPX ;失败
LOOPX4:
        MOV     A,B
        MOV     @R0,A
        INC     R0
        DJNZ     R2,LOOPX3
        SETB     P1.0;信号指示灯
;--------------------------------------------------
;CHECK BOTH STREAM DATA
        MOV     R0,#BUF1;储存 1ST 数据流
        MOV     R1,#BUF2;储存 2ND 据
        MOV     R2,#12
LOOPX51:
        MOV     A,@R0
        ANL     A,#3
        MOV     B,A
        MOV     A,@R1
        ANL     A,#3
        CJNE     A,B,LOOPX5
        INC     R0
        INC     R1
        DJNZ     R2,LOOPX51
        JMP     TXDATA
;--------------------------------------------------
LOOPX5:
        JMP     LOOPX ;检查 失败,重新LOOPX
;--------------------------------------------------
; (发送地址 - 键编码)
;TX 数据串 : $AAAAAAAAAAAA-KKKK!
;-------------------------------------------------
TXDATA:
        MOV     A,#'$'    ;通过串口发送 $ 字符
        CALL     TRANS    ;通过串口发送数据
        MOV     R2,#8    ;共8位地址
        MOV     R0,#BUF1;储存 1ST 数据流
TXNXD:
        MOV     A,@R0
        ANL     A,#3
        CALL     CONVD
LOOPX6:
        CALL     TRANS    ;通过串口发送数据
        INC     R0
        DJNZ     R2,TXNXD
        MOV     A,#'-'    ;通过串口发送 - 字符
        CALL     TRANS    ;通过串口发送数据
        MOV     R2,#4    ;共1位地键值
TXNXD1:
        MOV     A,@R0
        ANL     A,#3
        CALL     CONVD
LOOPX7:
        CALL     TRANS    ;通过串口发送数据
        INC     R0
        DJNZ     R2,TXNXD1
        MOV     A,#'!'    ;通过串口发送 ! 字符
        CALL     TRANS    ;通过串口发送数据
        CALL     CRLF
        JMP     LOOPX
;--------------------------------------------------
CONVD:
        CJNE     A,#0,CONV1
        MOV     A,#'0'
        RET
CONV1:
        CJNE     A,#3,CONV2
        MOV     A,#'1'
        RET
CONV2:
        CJNE     A,#1,CONV3
        MOV     A,#'2'
        RET
CONV3:
        MOV     A,#'3'
        RET
;--------------------------------------------------
WSTAT:                      ;等待数据流 SLOT >3MS
        NOP
        MOV     R4,#33
WSTAT1:
        JB         P3.2,WSTAT ;寻找数据流
        CALL     DLY100U
        DJNZ     R4,WSTAT1
WSTAT2:
        JNB     P3.2,WSTAT2
        RET             ;重新开始寻找数据流
;--------------------------------------------------
GET2P:
        CALL     GET1P ;RET TMP0=HIGH TIME, TMP1=LOW TIME
        JC         GPERR
        MOV     A,TMP1
        CPL     A
        ADD     A,TMP0 ;
        MOV     B.1,C
        CALL     GET1P ;2
        JC         GPERR ;2
        MOV     A,TMP1 ;2
        CPL     A ;1
        ADD     A,TMP0 ;2
        MOV     B.0,C ;2
        CLR     C
        RET
GPERR:
        SETB     C
        RET
;--------------------------------------------------
GET1P:
        MOV     TDN,#0
RXHP1:
        JNB     P3.2,RXHP2 ;2 cycle
        INC     TDN         ;1 ACCUMULATE HIGH TIME
        MOV     A,TDN         ;1
        ADD     A,#-80         ;1 high:> 80*7*1.085>600U-->ERR
        JNC     RXHP1         ;2
        JMP     RXPERR
RXHP2:
        MOV     A,TDN     ;1, find low,
        ADD     A,#-5     ;1,
        JC         RXHP3     ;2, HIGH MUST > 4*1.085*7 =31U
        JMP     RXPERR     ;2,
RXHP3:
        MOV     TMP0,TDN ;2
        MOV     TDN,#0     ;2
RXLP1:
        JB         P3.2,RXLP2 ;2
        INC     TDN     ;1
        MOV     A,TDN     ;1
        ADD     A,#-80     ;1 LOW> 80*7*1.085>600U-->ERR
        JNC     RXLP1     ;2
        JMP     RXPERR
RXLP2:
        MOV     A,TDN     ;1, find high
        ADD     A,#-5     ;1
        JC         RXLP3     ;2, LOW MUST >31U
        JMP     RXPERR     ;2
RXLP3:
        MOV     TMP1,TDN ;2
        CLR     C
        RET
RXPERR:
        SETB     C
        RET
;--------------------------------------------------
TXASC:
        MOV     A,@R1     ;TX 2 BYTE : "5A" --> '5' 'A'
        SWAP     A
        ANL     A,#0FH
        CALL     HEXASC
        CALL     TRANS    ;通过串口发送数据
        MOV     A,@R1
        ANL     A,#0FH
        CALL     HEXASC
        CALL     TRANS    ;通过串口发送数据
        RET
;--------------------------------------------------
HEXASC:
        ADD     A,#30H
        CJNE     A,#39H,HEXA1
        RET             ;39H
HEXA1:
        JNC     HEXA2
        RET             ;30..38H
HEXA2:
        ADD     A,#7     ;3A-->41H
        RET
;--------------------------------------------------
CRLF:
        MOV     A,#0DH
        CALL     TRANS    ;通过串口发送数据
        MOV     A,#0AH
        CALL     TRANS    ;通过串口发送数据
        RET
TRANS: ;通过串口发送数据
        MOV     SBUF,A  ;send A from pin txd
        JNB     TI,$     ;等待 TI = 1
        CLR     TI         ;清除 TI
        RET
;-----------------------------------------------
; 延时
;-----------------------------------------------
DLY01:      ;延时 100MS
        MOV     R6,#100 ;0.1 SEC 100/1MS = 100
        JMP     DD1
DLY50M: ;延时 50MS
        MOV     R6,#50
        JMP     DD1
DLY40M: ;延时 40MS
        MOV     R6,#40
        JMP     DD1
DLY20M: ;延时 20MS
        MOV     R6,#20
        JMP     DD1
DLY10M: ;延时 10MS
        MOV     R6,#10
        JMP     DD1
DLY8M:     ;延时 8MS
        MOV     R6,#8
        JMP     DD1
DLY5M:  ;延时 5MS
        MOV     R6,#5 ;
DD1:
        CALL     DLYT;基本延时 1MS
        DJNZ     R6,DD1
        RET
;------------------------------------------------
DLY1M:
        NOP
DLYT:     ;基本延时 1MS
        MOV     R5,#230 ;11.0592M= 1.085U
DLYT1:
        NOP
        NOP
        DJNZ     R5,DLYT1 ;1.085*230*4= 1MS
        RET
;------------------------------------------------               
DLY100U:
        MOV     R5,#46
        DJNZ     R5,$
        RET
DLY2HU:
        MOV     R5,#92 ;200US
        DJNZ     R5,$
        RET
;------------------------------------------------        
DLY5S:
        MOV     R7,#50
        JMP     DLYS1
DLY2S:
        MOV     R7,#20
        JMP     DLYS1
DLY02:
        MOV     R7,#2
        JMP     DLYS1
DLY05:
        MOV     R7,#5
        JMP     DLYS1
DLY1S:
        MOV     R7,#10
DLYS1:
        CALL     DLY01
        DJNZ     R7,DLYS1
        RET
        END



回复

使用道具 举报

沙发
发表于 2011-2-11 19:56:33 | 只看该作者
好!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
回复 支持 反对

使用道具 举报

板凳
发表于 2011-2-12 09:27:04 | 只看该作者
地址编码是怎么处理的呢?
回复 支持 反对

使用道具 举报

地板
 楼主| 发表于 2011-2-24 20:32:22 | 只看该作者
赵本山 发表于 2011-2-24 20:11
会C的人痛恨汇编。因为看不懂。
会汇编的人痛恨C。因为好不容易整懂汇编了。满世界都是C。就像自己爬了一天 ...

真的吗给你八十行用c试试
回复 支持 反对

使用道具 举报

5#
发表于 2011-2-24 20:38:25 | 只看该作者
看看热闹,不知行用汇编或C来算??
回复 支持 反对

使用道具 举报

6#
发表于 2011-2-24 20:11:32 | 只看该作者
会C的人痛恨汇编。因为看不懂。
会汇编的人痛恨C。因为好不容易整懂汇编了。满世界都是C。就像自己爬了一天才到山顶。别人坐个缆车十分钟就上来了。

所以这两种人经常掐架。鄙视对方。

还有一种人。汇编和C都会。他们就很淡定。他们说:
用语言要看场合看应用。能C解决的事,绝不汇编。。。
需要底层操作,指令周期精度要求较高,存储器有限时绝不用C

我觉得楼上那一段代码如果用C来写。代码不会超过40行。

点评

说的也是,只是C和汇编俺都不会!  发表于 2011-3-2 06:24
回复 支持 反对

使用道具 举报

7#
发表于 2011-2-27 15:13:29 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

8#
 楼主| 发表于 2011-2-27 18:30:25 | 只看该作者
gfd888 发表于 2011-2-27 15:13
这个2051要用什么烧写?这次订货顺便在CT买了几只2051,有空玩玩

随便买个兼容51单片机的烧录器都行的
回复 支持 反对

使用道具 举报

9#
发表于 2013-3-3 22:28:34 | 只看该作者
谢谢分享,谢谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|长汀无线电厂交流论坛  

GMT+8, 2024-5-5 11:30 , Processed in 0.800380 second(s), 23 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表