⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 at93c46.lis

📁 93c46的驱动程序,C51代码
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module AT93C46.C
                        .area text(rom, con, rel)
 0000                   .dbfile E:\MyDesign\ICCAVR\ATmega16_DEV\AT93C46\AT93C46.C
 0000                   .dbfunc e main _main fV
 0000           ;         temp_1 -> R20
                        .even
 0000           _main::
 0000                   .dbline -1
 0000                   .dbline 75
 0000           ; /**********************************************
 0000           ; *工程名称:eeprom AT93C46 读写
 0000           ; *工作模式:8位字节模式(ORG=GND),IO口模拟时序,mega16使用内部 8Mhz RC
 0000           ; *作    者:朱海峰
 0000           ; *邮    箱:ntzhf@163.com       QQ:543376422
 0000           ; *创建日期:2007.10.26
 0000           ; *修改日期:2007.10.30
 0000           ; ************************************************/
 0000           ; 
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; 
 0000           ; #define uint8_t          unsigned char
 0000           ; #define uint16_t   unsigned int
 0000           ; #define nop              NOP()
 0000           ; 
 0000           ; //op code
 0000           ; #define READ     0X80            //只包括前3个控制BIT--下同
 0000           ; #define EWEN     0X00
 0000           ; #define ERASE    0Xc0
 0000           ; #define WRITE    0X40
 0000           ; #define ERAL     0X00
 0000           ; #define WRAL     0X00
 0000           ; #define EWDS     0X00
 0000           ; 
 0000           ; #define DI               5
 0000           ; #define DO               6
 0000           ; #define CS               4
 0000           ; #define SK               7
 0000           ; #define ORG              0               //0=接地(8位模式);1=接VCC(16位模式)
 0000           ; #define DDR_DI           DDRB
 0000           ; #define DDR_DO           DDRB
 0000           ; #define DDR_CS           DDRB
 0000           ; #define DDR_SK           DDRB
 0000           ; 
 0000           ; #define PORT_DI          PORTB
 0000           ; #define PORT_DO          PORTB
 0000           ; #define PORT_CS          PORTB
 0000           ; #define PORT_SK          PORTB
 0000           ; 
 0000           ; #define PIN_DI           PINB
 0000           ; #define PIN_DO           PINB
 0000           ; #define PIN_CS           PINB
 0000           ; #define PIN_SK           PINB
 0000           ; 
 0000           ; #define set_di()   PORT_DI |= (1<<DI)
 0000           ; #define clr_di()   PORT_DI &= ~(1<<DI)
 0000           ; #define set_cs()   PORT_CS |= (1<<CS)
 0000           ; #define clr_cs()   PORT_CS &= ~(1<<CS)
 0000           ; #define set_sk()   PORT_SK |= (1<<SK)
 0000           ; #define clr_sk()   PORT_SK &= ~(1<<SK)
 0000           ; 
 0000           ; 
 0000           ; #define buzzer_on()    DDRD |= (1<<2);PORTD |= (1<<2)
 0000           ; #define buzzer_off()   DDRD |= (1<<2);PORTD &= ~(1<<2)
 0000           ; 
 0000           ; #define Green_off()      DDRB |= (1<<0);PORTB |= (1<<0)
 0000           ; #define Green_on()       DDRB |= (1<<0);PORTB &= ~(1<<0)
 0000           ; #define Red_off()        DDRB |= (1<<1);PORTB |= (1<<1)
 0000           ; #define Red_on()         DDRB |= (1<<1);PORTB &= ~(1<<1)
 0000           ; 
 0000           ; uint8_t Read(uint8_t add);
 0000           ; void EW_enable(void);
 0000           ; void EW_disable(void);
 0000           ; void Erase(uint8_t add);
 0000           ; void Erase_all(void);
 0000           ; void Write(uint8_t add,uint8_t w_data);
 0000           ; void IO_init(void);
 0000           ; void Delay_ms(uint16_t ms);
 0000           ; void Send_str_op(uint8_t op);
 0000           ; void Send_bits(uint8_t s_data);
 0000           ; void delay_us(void);
 0000           ; /*********************************************/
 0000           ; void main(void)
 0000           ; {
 0000                   .dbline 76
 0000           ;       uint8_t temp_1 = 0x00;
 0000 4427              clr R20
 0002                   .dbline 77
 0002           ;       nop;
 0002 0000              nop
 0004                   .dbline 78
 0004           ;       IO_init();
 0004 1CD0              xcall _IO_init
 0006 19C0              xjmp L3
 0008           L2:
 0008                   .dbline 80
 0008           ;       while (2)
 0008           ;       {
 0008                   .dbline 81
 0008           ;               EW_enable();      //读写使能
 0008 9AD0              xcall _EW_enable
 000A                   .dbline 83
 000A           ;               //Erase(0x03);
 000A           ;               Write(0x01,0x28); //在地址为0X01的EEPROM中写入数据0x28
 000A 28E2              ldi R18,40
 000C 01E0              ldi R16,1
 000E B7D0              xcall _Write
 0010                   .dbline 84
 0010           ;               nop;
 0010 0000              nop
 0012                   .dbline 85
 0012           ;               nop;
 0012 0000              nop
 0014                   .dbline 89
 0014           ;               //EW_disable();
 0014           ;               //Delay_ms(100);
 0014           ;               //EW_enable();
 0014           ;               temp_1 = Read(0x01); //读取地址为0X01的EEPROM中的数据
 0014 01E0              ldi R16,1
 0016 55D0              xcall _Read
 0018 402F              mov R20,R16
 001A                   .dbline 90
 001A           ;               nop;
 001A 0000              nop
 001C                   .dbline 91
 001C           ;               nop;
 001C 0000              nop
 001E                   .dbline 92
 001E           ;               EW_disable();
 001E 86D0              xcall _EW_disable
 0020                   .dbline 93
 0020           ;               if (temp_1 == 0x28)  //校验读取的数据是写入的
 0020 4832              cpi R20,40
 0022 29F4              brne L5
 0024                   .dbline 94
 0024           ;               {
 0024                   .dbline 95
 0024           ;                       Green_on();              //校验正确,绿色LED亮
 0024 B89A              sbi 0x17,0
 0026                   .dbline 95
 0026 C098              cbi 0x18,0
 0028                   .dbline 96
 0028           ;                       Red_off();
 0028 B99A              sbi 0x17,1
 002A                   .dbline 96
 002A C19A              sbi 0x18,1
 002C                   .dbline 97
 002C           ;               }
 002C 04C0              xjmp L6
 002E           L5:
 002E                   .dbline 99
 002E           ;               else
 002E           ;               {
 002E                   .dbline 100
 002E           ;                       Green_off();     //校验不正确,红色LED亮
 002E B89A              sbi 0x17,0
 0030                   .dbline 100
 0030 C09A              sbi 0x18,0
 0032                   .dbline 101
 0032           ;                       Red_on();
 0032 B99A              sbi 0x17,1
 0034                   .dbline 101
 0034 C198              cbi 0x18,1
 0036                   .dbline 102
 0036           ;               }
 0036           L6:
 0036                   .dbline 103
 0036           ;               for(;;)
 0036           L7:
 0036                   .dbline 104
 0036 0000              nop
 0038                   .dbline 103
 0038                   .dbline 103
 0038 FECF              xjmp L7
 003A           L3:
 003A                   .dbline 79
 003A E6CF              xjmp L2
 003C           X0:
 003C                   .dbline -2
 003C           L1:
 003C                   .dbline 0 ; func end
 003C 0895              ret
 003E                   .dbsym r temp_1 20 c
 003E                   .dbend
 003E                   .dbfunc e IO_init _IO_init fV
                        .even
 003E           _IO_init::
 003E                   .dbline -1
 003E                   .dbline 109
 003E           ;               nop;
 003E           ;       }
 003E           ; }
 003E           ; /*********************************************/
 003E           ; void IO_init(void)
 003E           ; {
 003E                   .dbline 110
 003E           ;        DDR_DI |= (1<<DI);
 003E BD9A              sbi 0x17,5
 0040                   .dbline 111
 0040           ;        PORT_DI &= ~(1<<DI);
 0040 C598              cbi 0x18,5
 0042                   .dbline 112
 0042           ;        DDR_CS |= (1<<CS);
 0042 BC9A              sbi 0x17,4
 0044                   .dbline 113
 0044           ;        PORT_CS &= ~(1<<CS);
 0044 C498              cbi 0x18,4
 0046                   .dbline 114
 0046           ;        DDR_SK |= (1<<SK);
 0046 BF9A              sbi 0x17,7
 0048                   .dbline 115
 0048           ;        PORT_SK &= ~(1<<SK);
 0048 C798              cbi 0x18,7
 004A                   .dbline -2
 004A           L11:
 004A                   .dbline 0 ; func end
 004A 0895              ret
 004C                   .dbend
 004C                   .dbfunc e delay_us _delay_us fV
                        .even
 004C           _delay_us::
 004C                   .dbline -1
 004C                   .dbline 119
 004C           ; }
 004C           ; /*********************************************/
 004C           ; void delay_us(void)
 004C           ; {
 004C                   .dbline 120
 004C           ;        nop;
 004C 0000              nop
 004E                   .dbline 121
 004E           ;        nop;
 004E 0000              nop
 0050                   .dbline 122
 0050           ;        nop;
 0050 0000              nop
 0052                   .dbline 123
 0052           ;        nop;
 0052 0000              nop
 0054                   .dbline -2
 0054           L12:
 0054                   .dbline 0 ; func end
 0054 0895              ret
 0056                   .dbend
 0056                   .dbfunc e Send_str_op _Send_str_op fV
 0056           ;              i -> R20
 0056           ;             op -> R22
                        .even
 0056           _Send_str_op::
 0056 0E940000          xcall push_gset2
 005A 602F              mov R22,R16
 005C                   .dbline -1
 005C                   .dbline 133
 005C           ; }
 005C           ; /*********************************************/
 005C           ; /*********************************************
 005C           ; 函数功能:发送起始位和操作码 
 005C           ; 描    述:一个BIT的起始位+两个BIT的操作码
 005C           ; 入口参数:OP
 005C           ; 出口参数:无
 005C           ; *********************************************/
 005C           ; void Send_str_op(uint8_t op)
 005C           ; {
 005C                   .dbline 136
 005C           ;       uint8_t i;
 005C           ; //===========start bit=================//
 005C           ;       set_di();
 005C C59A              sbi 0x18,5
 005E                   .dbline 137
 005E           ;       delay_us();
 005E F6DF              xcall _delay_us
 0060                   .dbline 138
 0060           ;       set_sk();
 0060 C79A              sbi 0x18,7
 0062                   .dbline 139
 0062           ;       delay_us();
 0062 F4DF              xcall _delay_us
 0064                   .dbline 140
 0064           ;       clr_sk();
 0064 C798              cbi 0x18,7
 0066                   .dbline 141
 0066           ;       delay_us();
 0066 F2DF              xcall _delay_us
 0068                   .dbline 143
 0068           ; //===========send op code================//
 0068           ;       for (i=0;i<2;i++,op <<=1)
 0068 4427              clr R20
 006A 0DC0              xjmp L17
 006C           L14:
 006C                   .dbline 144
 006C           ;       {
 006C                   .dbline 145
 006C           ;               if (op & 0x80)
 006C 67FF              sbrs R22,7

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -