51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机源码 > 详细内容
汽车通讯控制程序 (汇编)
发布时间:2009/6/2  阅读次数:332  字体大小: 【】 【】【

作者:未知       来源:89s52.cn

; *************************************
; *             汽车通讯控制程序                       *
; *                     LOU RANMIAO                         *
; *************************************
; *****************************************************************
;*                                                                                                                                       *
;* 后车信号接收         P1.0       1                         40       VCC                                     *
;* 前车信号接收         P1.1       2                         39       P0.0       左转开关(L)     *
;*                                   P1.2       3                         38       P0.1       右转开关(L)     *
;*                                   P1.3       4                         37       P0.2       刹车开关(L)     *
;*                                   P1.4       5                         36       P0.3         前车左转指示 *
;*                                   P1.5       6                         35       P0.4         前车右转指示 *
;*                                   P1.6       7                         34       P0.5         后车超车指示 *
;*                                   P1.7       8                         33       P0.6         前车刹车指示 *
;*                                   RST         9                         32       P0.7                                   *
;*                                   P3.0       10     MCS-51     31       EA             VDD                   *
;*                                   P3.1       11                       30       ALE                                     *
;*     INTEX0                 P3.2       12                       29       PSEN                                   *
;*     INTEX1                 P3.3       13                       28       P2.7                                   *
;*                                   P3.4       14                       27       P2.6                                   *
;*     remoteout           P3.5       15                       26       P2.5                                   *
;*                                   P3.6       16                       25       P2.4                                   *
;*                                   P3.7       17                       24       P2.3                                   *
;*                                 XTAL2       18                       23       P2.2                                   *
;*                                 XTAL1       19                       22       P2.1                                   *
;*                                     VSS       20                       21       P2.0                                   *
;*                                                                                                                                       *
;*                                                                                                                                       *
;   *****************************************************************
;
;            发送接收一体板程序
;*************************************
;*                                                                     *
;*           主程序和中断程序入口                 *
;*                                                                     *
;*************************************
    ORG         0000H          ;程序开始地址
                               LJMP       START      ;转START
    ORG         0003H          ;外中断0中断入口
                               LJMP       INTEX0      ;转INTEX0
    ORG         000BH          ;定时器T0中断入口
                               RETI            ;返回
                               ORG         0013H          ;外中断1入口地址
                 LJMP       INTEX1      ;转INTEX1
    ORG         001BH          ;定时器T1中断入口
                 LJMP       INTT1      ;转INTT1
    ORG         0023H          ;串行口中断入口
    RETI            ;中断返回
    ORG         002BH          ;定时器T2中断入口
    RETI            ;中断返回
;
;***************************
;*                                                 *
;*             初始化程序               *
;*                                                 *
;****************************
CLEARMEMIO:         CLR  A        ;清A
    DEC  A        ;A为#0FFH
    MOV         P1,A        ;端口置1
                               MOV         P2,A        ;端口置1
                               MOV         P3,A        ;端口置1
                               CLR         P3.5        ;关遥控输出
CLEARMEM:             MOV         SP,#70H                 ;设堆栈基址为70H
                               MOV         IE,#00H                 ;关所有中断
                               MOV         IP,#01H      ;外中断0为高优先级
                               MOV         TMOD,#22H    ;8位自动重装初值定时器
                               MOV         TH1,#0F3H    ;置13微秒定时器初值
                               MOV         TL1,#0F3H    ;
                               SETB       EX0        ;允许外中断0中断
                               SETB       EX1        ;允许外中断1中断
                               CLR         ET1        ;关定时器T1中断
                               SETB       EA        ;开总中断允许
    RET            ;子程序返回
;
;*************************************
;*                                                                     *
;*         主 程 序                                         *
;*                                                                     *
;*************************************
START:                   LCALL     CLEARMEMIO           ;上电初始化
;
MAIN:                     LJMP       KEYWORK      ;跳到查键程序
    NOP                                         ;PC值出错处理
    NOP            ;
    LJMP  START      ;重新初始化启动
;
;*************************************
;*                                                                     *
;*               T1中断服务程序                         *
;*                                                                     *
;*************************************
INTT1:                   CPL         P3.5                       ;产生40kHZ信号,用作红外线发射
    RETI            ;中断返回
;
;
;*************************************
;*                                                 *
;*                 扫 键 程 序(主程序)         *
;*                                                 *
;*************************************
;
KEYWORK:               SETB       P0.2        ;置输入状态
                               SETB       P0.0        ;置输入状态
                               SETB       P0.1        ;置输入状态
                               CLR         00H        ;清00H刹车标志位
                               JNB         P0.2,KEY3    ;查刹车输入,为0转KEY3
KEY4:                     JNB         P0.0,KEY0    ;查左转输入,为0转KEY0
                               JNB         P0.1,KEY1    ;查右转输入,为0转KEY1
KEY5:                     JB           00H,KEY2      ;标志为1转KEY2
                               SETB       EA        ;标志为0,开总中断允许
                               SETB       EX1        ;开外中断1
                               SETB       EX0        ;开外中断0
                               LCALL     DL10MS      ;延时60毫秒
                               LCALL     DL10MS      ;
                               LCALL     DL10MS      ;
                               LCALL     DL10MS      ;
                               LCALL     DL10MS      ;
                               LCALL     DL10MS      ;
KEY6:                     SETB       P0.3        ;关前车左转提示输出
                               SETB       P0.4        ;关前车右转提示输出
                               SETB       P0.5        ;关后车超车提示输出
                               SETB       P0.6        ;关前车刹车提示输出
                               LJMP       KEYWORK      ;跳回KEYWORK循环
;
KEY3:                     LCALL     DELAY      ;延时消抖动
                               JB           P0.2,KEY5    ;是干扰转KEY5
                               SETB       00H        ;刹车标志置1
                               LJMP       KEY4        ;转KEY4查左右转弯按键
;
KEY0:                     LCALL     DELAY      ;延时消抖动
                               JB           P0.0,KEY5    ;是干扰转KEY5
                               MOV         A,#02H      ;发2个脉冲
                               LJMP       REMOTE      ;跳到发射程序
;
KEY1:                     LCALL     DELAY      ;延时消抖动
                               JB           P0.1,KEY5    ;是干扰转KEY5
                               MOV         A,#05H      ;发5个脉冲
                               LJMP       REMOTE      ;跳到发射程序
KEY2:                     CLR         00H        ;清00H标志
                               MOV         A,#08H      ;发8个脉冲
                               LJMP       REMOTE      ;跳到发射程序

;******************************
;     前车信息接收程序(外中断0)
;******************************
;从P1.1口接收脉冲
INTEX0:                 PUSH       ACC        ;现场保护
                               PUSH       PSW        ;
                               CLR         EX0        ;关外中断0
                               CLR         EX1        ;关外中断1
                               CLR         EA        ;关总中断允许
                               JNB         P1.1,READ1    ;P1.1为0转READ1
READOUT0:             POP         PSW        ;是干扰,中断退出
                               POP         ACC        ;
                               RETI            ;
;
READ1:                   CLR         A        ;清A
                               MOV         DPH,A      ;清DPTR
                               MOV         DPL,A      ;
HARD1:                   JB           P1.1,HARD11         ;8*255=2.04ms,>2.04MS判定是起始位
                               INC         DPTR        ;低电平计数(周期为8微秒)
                               NOP            ;
                               NOP
                               AJMP       HARD1      ;低电平循环计数
HARD11:                 MOV         A,DPH      ;
                               JZ           READOUT0      ;高8位为0,小于2.04MS,退出
                               CLR         A        ;>2.04MS判定是起始位
READ11:                 INC         A        ;脉冲数加1
READ12:                 JNB         P1.1,READ12    ;低电平等待
                               MOV         R1,#0AH      ;高电平脉宽判断用
READ13:                 JNB         P1.1,READ11    ;变低电平转READ11
                               LCALL     DELAY                   ; 延时512微秒
                               DJNZ       R1,READ13    ;延时小于10次转READ13循环
                               DEC         A        ;高电平宽大于5MS停止接收,A减1
                               DEC         A        ;再减1
                               JZ           FLT        ;是2个脉冲,执行FLT
                               DEC         A        ;
                               DEC         A        ;
                               DEC         A        ;
                               JZ           FRT        ;是5个脉冲,执行FRT
                               DEC         A        ;
                               DEC         A        ;
                               DEC         A        ;
                               JZ           STOP        ;是8个脉冲,执行STOP
                               CLR         PX0        ;外中断0置低优先级
                               SETB       PX1        ;外中断1置高优先级
                               LJMP       READOUT0      ;转中断退出
;
;******************************
;     后车信息接收程序(外中断1)
;******************************
;接收程序原理同外中断0,从P1.0口接收脉冲
INTEX1:                 PUSH       ACC        ;
                               PUSH       PSW        ;
                               CLR         EX1        ;
                               CLR         EX0        ;
                               CLR         EA        ;
                               JNB         P1.0,READ2    ;
READOUT1:             POP         PSW        ;
                               POP         ACC        ;
                               RETI            ;
READ2:                   CLR         A        ;
                               MOV         DPH,A      ;
                               MOV         DPL,A      ;
HARD2:                   JB           P1.0,HARD21    ;
                               INC         DPTR        ;
                               NOP            ;
                               NOP            ;
                               AJMP       HARD2      ;
HARD21:                 MOV         A,DPH      ;
                               JZ           READOUT1      ;
                               CLR         A        ;
READ21:                 INC         A        ;
READ22:                 JNB         P1.0,READ22    ;
                               MOV         R1,#0AH      ;
READ23:                 JNB         P1.0,READ21    ;
                               LCALL     DELAY      ;
                               DJNZ       R1,READ23    ;
                               DEC         A        ;
                               DEC         A        ;
                               JZ           BLT        ;是2个脉冲,后车超车转BLT
                               CLR         PX1        ;外中断0与外中断1交换中断优先级
                               SETB       PX0        ;
                               LJMP       READOUT1      ;转中断退出
;
FLT:                       CLR         P0.3        ;前车左转弯,P0.3为0
                               LJMP       READOUT0      ;转外中断0中断退出
FRT:                       CLR         P0.4        ;前车右转弯,P0.4为0
                               LJMP       READOUT0      ;转外中断0中断退出
BLT:                       CLR         P0.5        ;后车超车,P0.5为0
                               LJMP       READOUT1      ;转外中断1中断退出
STOP:                     CLR         P0.6        ;前车刹车,P0.6为0
                               LJMP       READOUT0      ;转外中断0中断退出
;
;********************************
;
;               载波发送程序
;
; *******************************
;A中数据为发射的脉冲个数
REMOTE:                 CLR         EX0        ;关外中断0
                               CLR         EX1        ;关外中断1
                               MOV         R1,A        ;发射脉冲个数入R1
                               LJMP       OUT3        ;第一位脉冲处理
OUT:                       MOV         R0,#02H      ;1毫秒脉冲控制
OUT1:                     SETB       ET1        ;开定时T1中断(40KHZ红外调制用)
                               SETB       TR1        ;开启T1
                               LCALL     DELAY               ; 延时513微秒 6(2)*0.5=3MS(1MS)
                               DJNZ       R0,OUT1      ;总延时值不到转OUT1再循环
                               MOV         R0,#02H      ;赋1毫秒脉宽定时值
OUT2:                     CLR         TR1        ;关T1
                               CLR         ET1        ;关T1中断
                               CLR         P3.5        ;关红外线输出
                               LCALL     DELAY               ; 延时513微秒
                               DJNZ       R0,OUT2      ;总延时(1MS)不到转OUT2再延时
                               DJNZ       R1,OUT      ;脉冲未发完,转OUT再发
                               LCALL     DL10MS      ;脉冲发完延时10毫秒(帧间隔)
                               LJMP       KEY5        ;脉冲发送结束跳到KEY5
OUT3:                     MOV         R0,#06H      ;3毫秒脉宽控制
                               LJMP       OUT1        ;转OUT1红外线发射
;
;
;*************************************
;*                                                                     *
;*           延时 249 * 2+2 = 500 us         *
;*                                                                     *
;*************************************
DELAY:                   MOV         R7,#0F9H
DELAY1:                 DJNZ       R7,DELAY1
    RET
;
;*************************************
;*                                                                     *
;*                         延时10 ms                       *
;*                                                                     *
;*************************************
DL10MS:                 MOV         R6,#14H
DL10MS1:               LCALL     DELAY
                               DJNZ       R6,DL10MS1
    RET
;
;
    END          ;程序结束

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号