注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
xu__changhua的个人空间 https://home.eeworld.com.cn/space-uid-101717.html [收藏] [复制] [分享] [RSS]
日志

今天调通了24C64/UART-为配合主题贴64*24点阵显示板而作

已有 1186 次阅读2009-3-22 23:34 |个人分类:开发设计

 IC377_CS1 EQU P2.0
 IC377_CS2 EQU P2.1
 IC377_CS3 EQU P2.2
 IC377_WR  EQU P2.3
        WP EQU P2.4
        SCL EQU P2.5
        SDA EQU P2.6
 IC4094_RX EQU P1.0
 IC4094_TX EQU P1.1
 IC4094_ST EQU P1.2

        org 0000h
        ljmp setup;转向初始化设置程序
        org 000bh
        ljmp timer0;转向定时器0中断服务程序
        org 0023h
        ljmp uart_yb;转向串行接收中断服务程序
        org 0030h
setup:
                      ;TMOD: GATE|C/!T|M1|M0|GATE|C/!T|M1|M0
        MOV TMOD,#00100001B;   0    0  1   0   0    0   0  1
        MOV TH1,#0FFH       ;波特率57600
        MOV TL1,#0FFH
                      ;SCON: SM0|SM1|SM2|REN|TB8|RB8|TI|RI
        MOV SCON,#01010000B ; 0   1   0   1   0   0  0  0
        MOV PCON,#10000000B ;SMOD=1
        SETB TR1

 ;setb ren;允许接收数据
 ;setb es 允许从中断中接收数据
 ;setb ea;开启总中断

        MOV P0,#0;面板清零不显示
        LCALL XIE377_3
        LCALL XIE377_2
        LCALL XIE377_1
        mov p0,#0ffh;恢复复位状态
        clr wp;允许写24c64eeprom,地址从0000h~1fffh共8192个字节
main:
 CLR     RI     ;准备好接受上位机信息
        JNB     RI,$   ;等待接收
        MOV b,sbuf     ;保存到b中
        mov dptr,#100h ;选24c64eeprom任意地址
        call write24c  ;调用,默认将b中数据写到24c64eeprom以dptr所指示的单元中

        mov dptr,#100h ;任意取24c64eeprom中某个单元地址
        call read24c   ;调用读取24c64eeprom
        clr ti         ;准备好传送给上位机
        MOV SBUF,A     ;传送给上位机
        jnb ti,$       ;等待传送完毕
        jmp main
WRITE24C:
     LCALL INVI ;开始条件
     MOV A,#0a0H;特征字
     LCALL WRI  ;写
     JB SDA,WRITE24C;写入了吗

     MOV A,dph ;片地址   H
     LCALL WRI  ;写
     JB SDA,WRITE24C;写入了吗

     MOV A,dpl ;片地址   L
     LCALL WRI  ;写
     JB SDA,WRITE24C;写入了吗

     MOV A,b ;数据
     LCALL WRI  ;写
     JB SDA,WRITE24C;写入了吗
     LCALL STOP ;停止条件
     RET

READ24C:
     LCALL INVI
     MOV A,#0A0H
     LCALL WRI
     JB SDA,READ24C

     MOV A,dph ;片地址H
     LCALL WRI
     JB SDA,READ24C

     MOV A,dpl ;片地址L
     LCALL WRI  ;写
     JB SDA,READ24C;写入了吗

     LCALL INVI
     MOV A,#0A1H
     LCALL WRI
     JB SDA,READ24C
     LCALL RRD
     LCALL STOP
     RET

DEL10US:
      MOV R7,#18
  DEL:MOV R6,#0H
      DJNZ R6,$
      DJNZ R7,DEL
      RET

  RRD: ;MOV R0,#30H
       MOV R2,#08H
   RDD:CLR SCL
      SETB  SCL
      MOV C,SDA
      RLC A
      CLR  SCL
      DJNZ R2,RDD
      LCALL ACK
      ;读取结果在A中
      RET

ACK:  CLR SDA
      SETB SCL
      CLR SCL
      RET

WRI: MOV R2,#08H
     clr c
     CLR  SCL
WRII:
     RLC A
     MOV SDA,C
     CLR  SCL
     SETB  SCL
     CLR  SCL
     DJNZ R2,WRII
     SETB sda
     SETB  SCL
     RET

INVI:CLR  SCL        ;SCL为低允许数据线改变,不认为是起始或停止信号
     SETB SDA        ;数据线保持高电平
      SETB  SCL        ;准备启动i2c总线
      CLR SDA         ;启动信号
      CLR  SCL        ;启动完成
      setb sda
      RET

 STOP:CLR SCL
      CLR SDA
      SETB  SCL
      SETB SDA
      RET


XIE377_3:
 CLR   IC377_CS3
 CLR   IC377_WR
 SETB  IC377_WR
 SETB  IC377_CS3
        RET

XIE377_2:
 CLR   IC377_CS2
 CLR   IC377_WR
 SETB  IC377_WR
 SETB  IC377_CS2
        RET

XIE377_1:
 CLR   IC377_CS1
 CLR   IC377_WR
 SETB  IC377_WR
 SETB  IC377_CS1
        RET

timer0:
        reti
uart_yb:
 ;允许从中断中接收数据
        reti

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章