历史上的今天
返回首页

历史上的今天

今天是:2025年01月11日(星期六)

2018年01月11日 | 24c02开机计数器程序

2018-01-11 来源:eefocus

LED1    EQU    08H 
LED2    EQU    09H 
LED3    EQU    0AH 
LED4    EQU    0BH 

LedT0    EQU    0CH    ;0-3 轮流点亮4个数据管 

SDA    EQU    P2.0 
SCL    EQU    P2.1 
Address    EQU    0EH 
I2CData    EQU    0FH 
;================================================= 
    ORG 0000H  
    LJMP START;转入主程序 

;================================================= 
    ORG    000BH             
;定时器0中断入口 
INT_TO: 
    PUSH    ACC 
    PUSH    PSW 

    CLR    TF0        ;清定时0中断标志 
     MOV     TH0,#0F6H    ;2.5MS 
     MOV     TL0,#03DH    ; 

     MOV     A,#11110000B    ;关数码管 
    ORL    P2,A 

     MOV     A,LedT0 
    CJNE    A,#0,INT_T0_1 
     MOV     A,LED1 
     MOV C    A,@A+DPTR 
     MOV     P0,A 
    CLR    P2.7     
     MOV     LedT0,#1 
    LJMP    INT_T0_END 
 INT_T0_1: 
       
     MOV     A,LedT0 
    CJNE    A,#1,INT_T0_2 
     MOV     A,LED2 
     MOV C    A,@A+DPTR 
     MOV     P0,A 
    CLR    P2.6     
     MOV     LedT0,#2 
    LJMP    INT_T0_END 
 INT_T0_2: 
       
      MOV     A,LedT0 
    CJNE    A,#2,INT_T0_3 
     MOV     A,LED3 
     MOV C    A,@A+DPTR 
     MOV     P0,A 
    CLR    P2.5     
     MOV     LedT0,#3 
    LJMP    INT_T0_END 
 INT_T0_3: 
       
     MOV     A,LED4 
     MOV C    A,@A+DPTR 
     MOV     P0,A 
    CLR    P2.4     
     MOV     LedT0,#0 
    LJMP    INT_T0_END 
       
 INT_T0_END: 

    POP    PSW     
    POP    ACC 

RETI 

;============================================= 

START: 
     MOV     SP,#60H 

    CALL    DELAY10MS     
    CALL    DELAY10MS 
    CALL    DELAY10MS 

    CALL    AT24C01_READ_ALL 

     MOV     A,LED1 
    CJNE    A,#10,$+3    ;A<10 ,C=1     
    JNC    START_RESET_24C01 
     MOV     A,LED2 
    CJNE    A,#10,$+3    ;A<10 ,C=1     
    JNC    START_RESET_24C01 
     MOV     A,LED3 
    CJNE    A,#10,$+3    ;A<10 ,C=1     
    JNC    START_RESET_24C01 
     MOV     A,LED4 
    CJNE    A,#10,$+3    ;A<10 ,C=1     
    JNC    START_RESET_24C01 
    JMP    START_INC 
;第一次使用复位内部数值 
START_RESET_24C01: 
     MOV     LED1,#0 
     MOV     LED2,#0 
     MOV     LED3,#0 
     MOV     LED4,#0 
    JMP    START_INC_END 
;加1 
START_INC: 
    INC    LED4 
     MOV     A,LED4 
    CJNE    A,#10,START_INC_END    ;等于10,进位 
     MOV     LED4,#00 
    INC    LED3 
     MOV     A,LED3 
    CJNE    A,#10,START_INC_END 
     MOV     LED3,#00 
    INC    LED2 
     MOV     A,LED2 
    CJNE    A,#10,START_INC_END 
     MOV     LED2,#00 
    INC    LED1 
     MOV     A,LED1 
    CJNE    A,#10,START_INC_END 
     MOV     LED1,#00 
     MOV     LED2,#00 
     MOV     LED3,#00 
     MOV     LED4,#00 

START_INC_END:     
    ;储存 
    CALL    AT24C01_WRITE_ALL 
     

     MOV     TMOD,#01H    ;设定T0为十六位定时模式。 
     MOV     TH0,#0F6H    ;2MS 
     MOV     TL0,#03DH    ; 
    SETB    TR0        ;开定时器0 
    SETB    ET0        ;致能定时0中断 
    CLR    TF0        ;清定时0中断标志 
    SETB    EA        ;开总中断 

     MOV     LedT0,#00H 
     MOV     DPTR,#TABLE 


;============================================= 
SCAN:     

    ;按键扫描 
    JB    P3.2,$ 
    LCALL    DELAY10MS    ;去抖动 
    JNB    P3.2,KEY_RESET 
    LJMP    SCAN 
;============================================= 
KEY_RESET: 
     MOV     LED1,#00 
     MOV     LED2,#00 
     MOV     LED3,#00 
     MOV     LED4,#00 

    ;储存 
    CALL    AT24C01_WRITE_ALL     
    ;检测按键是否放开 
    JNB    P3.2,$ 
    JMP    SCAN 

DELAY10MS:  
     MOV  R4,#20 
DELAY10MSA: 
     MOV  R5,#247 
    DJNZ R5,$ 
    DJNZ R4,DELAY10MSA 
RET 

TABLE: 
    DB    00101000B    ;0 
    DB    11101011B    ;1 
    DB    00110010B    ;2 
    DB    10100010B    ;3 
    DB    11100001B    ;4 
    DB    10100100B    ;5 
    DB    00100100B    ;6 
    DB    11101010B    ;7 
    DB    00100000B    ;8 
    DB    10100000B    ;9 
    DB    01100000B    ;A 
    DB    00100101B    ;b 
    DB    00111100B    ;C 
    DB    00100011B    ;d 
    DB    00110100B    ;E 
    DB    01110100B    ;F 
    DB    11110111B    ;- 
    DB    11111111B    ; 
;==================================================== 
;读出全部数据 
AT24C01_READ_ALL: 
     MOV     Address,#00H 
    CALL    I2C_READ 
     MOV     LED1,A        ;读出数据 
     MOV     Address,#01H 
    CALL    I2C_READ 
     MOV     LED2,A        ;读出数据 
     MOV     Address,#02H 
    CALL    I2C_READ 
     MOV     LED3,A        ;读出数据 
     MOV     Address,#03H 
    CALL    I2C_READ 
     MOV     LED4,A        ;读出数据 
RET 
;==================================================== 
;写入全部数据 
AT24C01_WRITE_ALL: 
     MOV     Address,#00H 
     MOV     A,LED1 
     MOV     I2CData,A 
    CALL    I2C_WRITE    ;写入数据 
     MOV     Address,#01H 
     MOV     A,LED2 
     MOV     I2CData,A 
    CALL    I2C_WRITE    ;写入数据 
     MOV     Address,#02H 
     MOV     A,LED3 
     MOV     I2CData,A 
    CALL    I2C_WRITE    ;写入数据 
     MOV     Address,#03H 
     MOV     A,LED4 
     MOV     I2CData,A 
    CALL    I2C_WRITE    ;写入数据 
RET 
;==================================================== 
;写一个字节    Address地址    I2CDatata写入的数据 
;==================================================== 
I2C_WRITE: 
    I2C_WRITE_A: 
    LCALL    I2C_START 
     MOV     A,#10100000B 
    LCALL    I2C_SEND8BIT 
    LCALL    I2C_ACK 
    JC    I2C_WRITE_A    ;=1,表示无确认,再次发送 
     
     MOV     A,Address 
    LCALL    I2C_SEND8BIT 
    LCALL    I2C_ACK     

     MOV     A,I2CData 
    LCALL    I2C_SEND8BIT 
    LCALL    I2C_ACK     
    LCALL    I2C_STOP 
RET     



;==================================================== 
;读一个字节    Address地址    Data读出的数据 
;==================================================== 

I2C_READ: 
    I2C_READ_A: 
    LCALL    I2C_START 
     MOV     A,#10100000B 
    LCALL    I2C_SEND8BIT 
    LCALL    I2C_ACK 
    JC    I2C_READ_A    ;=1,表示无确认,再次发送 

     MOV     A,Address 
    LCALL    I2C_SEND8BIT 
    LCALL    I2C_ACK     

    I2C_READ_B: 
    LCALL    I2C_START 
     MOV     A,#10100001B 
    LCALL    I2C_SEND8BIT 
    LCALL    I2C_ACK 
    JC    I2C_READ_B 

    LCALL    I2C_RECEIVE8BIT 
     MOV     I2CData,A 
    LCALL    I2C_ACK 
    LCALL    I2C_STOP 
RET 



;发送开始信号 
I2C_START: 
    SETB    SCL 
    SETB    SDA 
    NOP 
    NOP 
    CLR    SDA 
    NOP 
    NOP 
    CLR    SCL 
RET 
;发送结束信号 
I2C_STOP: 
    CLR    SDA 
    NOP 
    NOP 
    SETB    SCL 
    NOP 
    NOP 
    SETB    SDA 
RET 

;发送接收确认信号 
I2C_ACk: 
    SETB    SDA 
    SETB    SCL 
    NOP 
    NOP 
    JB    SDA,I2C_ACK0 
    CLR    C     
    SJMP    I2C_ACK_END 
    I2C_ACK0: 
    SETB    C 
    I2C_ACK_END: 
    CLR    SCL 
RET 

;送八位数据 
I2C_SEND8BIT: 
     MOV     B,#08H 
I2C_SEND8BIT_A:     
    RLC    A 
     
     MOV     SDA,C 
    SETB    SCL 
    NOP 
    NOP 
    CLR    SCL 
    DJNZ    B,I2C_SEND8BIT_A 
RET 


;接收八位数据 
I2C_RECEIVE8BIT: 
     MOV     B,#08H 
    CLR    A 
    SETB    SDA 
I2C_RECEIVE8IT_A: 
    SETB    SCL 
    NOP 
    NOP 
     MOV     C,SDA 
    RLC    A 
    CLR    SCL 
    DJNZ    B,I2C_RECEIVE8IT_A 

RET 
END


推荐阅读

史海拾趣

台湾义隆电子(ELAN)公司的发展小趣事

义隆电子在多个技术领域保持领先地位,如数字模拟混合技术、高阶设计流程等。这些技术优势使得公司能够迅速掌握市场脉动,开发出具有实用性的新产品。同时,义隆电子还注重将先进技术应用于实际产品中,如高性能的触摸屏控制器、触摸板模块等,这些产品广泛应用于智能手机、平板电脑等消费电子产品中,赢得了市场的广泛认可。

EOZ S.A.S公司的发展小趣事

EOZ S.A.S公司非常重视企业文化和团队建设。公司倡导“创新、协作、共赢”的价值观,鼓励员工积极参与创新活动并分享创新成果。同时,公司还注重员工的培训和发展,为员工提供丰富的培训资源和晋升机会。这些举措不仅激发了员工的积极性和创造力,也为企业的发展提供了有力的人才保障。在EOZ S.A.S公司的发展历程中,优秀的企业文化和团队成为公司最宝贵的财富之一。

Compensated Devices Inc公司的发展小趣事

Compensated Devices Inc(简称CDI)最初是一家小型电子元件制造商,专注于生产高精度电阻器。随着科技的飞速发展,传统电阻器已无法满足新兴市场的需求。CDI的创始人李先生敏锐地洞察到这一点,决定投入大量资源进行研发,推出了具有温度补偿和自动校准功能的新型电阻器。这一创新产品迅速获得了市场的认可,CDI也因此逐渐在电子行业中崭露头角。

千志电子(CCO)公司的发展小趣事

为了进一步拓展业务版图,千志电子开始进军国际市场。2006年,千志电子在香港设立了千志电子(香港)有限公司,将其作为国际服务据点重心之一。这一举措使千志电子能够更好地了解国际市场需求和趋势,加强与国外客户的联系和合作。同时,千志电子还积极参加国际展览和论坛,展示其优质产品和先进技术,提高了品牌知名度和国际影响力。

德国ACAM公司的发展小趣事

近年来,ACAM公司开始将目光投向增材制造领域。ACAM公司与上海交通大学等高校建立了紧密的合作关系,共同推动增材制造技术的发展。通过合作研究,ACAM公司成功地将时间数字转换技术应用于增材制造领域,为行业的发展提供了新的动力。

风华(FH)公司的发展小趣事

随着光伏胶膜业务的快速发展,福斯特面临着仓库管理和存储的巨大挑战。光伏胶膜成品体积大、重量重,传统人工作业方式效率低下且劳动强度大。为了应对这一挑战,福斯特引入了智能仓储系统,与亨通智能合作打造自动化立库系统。该系统通过堆垛机、RGV、缠绕膜等设备的配合使用,实现了库内产品的全面自动化搬运、存储与管理。这不仅大大提高了仓库的运营管理效率,还确保了产品的先进先出和库存盘点的准确性。这一智能化改造不仅提升了福斯特自身的竞争力,也为整个光伏行业的数字化转型树立了标杆。

问答坊 | AI 解惑

疑问

在MODELSIM 6如何进行testbench…

查看全部问答>

S3C2440 WINCE 5.0上SD接口的WIFI驱动移植上去了,可以检测到网卡,但是搜不到网络

好不容易才把WIFI驱动移植进去,但是现在搜不到网络,但是用笔记本可以一下子搜到很多。 我的WIFI是接外置天线的,就是把一根比较长的天线焊在上面,我不知接之后是否还要考虑信号问题。 用的WIFI型号叫GM9601,是基于MARVELL 8686的。它的数据手 ...…

查看全部问答>

DDS+PLL是目前实用的频率合成方式么?

目前在无线电收发方面常用的频率合成方式有哪些呢?希望在该领域有经验的大虾推荐一些。…

查看全部问答>

急:listview 中背景图片怎么能不平铺?

listview (ownerdraw)中背景图片怎么能不平铺? 我这边设置的背景图片,再拉动滚动条的时候,背景也滚动的,背景图片是平铺的? 有没有办法不平铺,改成固定背景? 谢谢。…

查看全部问答>

推送全国的报告怎么写,有人会么

本帖最后由 paulhyde 于 2014-9-15 03:54 编辑 RT…………  …

查看全部问答>

AT89C51与三菱D700变频器通讯

哪位高手有AT89C51与三菱D700变频器通讯的汇编程序.......…

查看全部问答>

序列检码器 状态机 的一点小疑问

    序列检测器的逻辑功能描述:10010 的序列检码器,状态转移图如下图所示:     我我有一点不明白, 在状态B的情况下要是输入1的话,直接进入A状态不行么?G状态下如果输入1的话也可以直接进入A状态啊,我就是这样做 ...…

查看全部问答>

【设计工具】ISE使用指导,适合初学者

初学者的ISE使用指导,希望对大家有所帮助.   …

查看全部问答>

驱动入门

驱动入门:一个简单的字符设备驱动            首先我要向大家推荐一下韦东山老师的视频,他在视频里讲解的非常的好,把代码分析的非常的透彻,而且他会在视频里现场写出每一个程序的代码,而不是从其他的地方拿一 ...…

查看全部问答>

matlab 和CCS 安装要求先后顺序吗

最近折腾 matlab 和c28通讯,程序下进DSP后一直出现跑飞的现象。 经过N次的折腾,终于在装了另一个版本的ccs3.3后成功了。 不知有大侠也碰到过这样的问题不。 .matlab 和ccs 是否有安装先后的问题。我实在是懒得再去试了,已经试的吐血了,装了 ...…

查看全部问答>