📄 at93c46.s
字号:
.module AT93C46.C
.area text(rom, con, rel)
.dbfile E:\MyDesign\ICCAVR\ATmega16_DEV\AT93C46\AT93C46.C
.dbfunc e main _main fV
; temp_1 -> R20
.even
_main::
.dbline -1
.dbline 75
; /**********************************************
; *工程名称:eeprom AT93C46 读写
; *工作模式:8位字节模式(ORG=GND),IO口模拟时序,mega16使用内部 8Mhz RC
; *作 者:朱海峰
; *邮 箱:ntzhf@163.com QQ:543376422
; *创建日期:2007.10.26
; *修改日期:2007.10.30
; ************************************************/
;
; #include <iom16v.h>
; #include <macros.h>
;
; #define uint8_t unsigned char
; #define uint16_t unsigned int
; #define nop NOP()
;
; //op code
; #define READ 0X80 //只包括前3个控制BIT--下同
; #define EWEN 0X00
; #define ERASE 0Xc0
; #define WRITE 0X40
; #define ERAL 0X00
; #define WRAL 0X00
; #define EWDS 0X00
;
; #define DI 5
; #define DO 6
; #define CS 4
; #define SK 7
; #define ORG 0 //0=接地(8位模式);1=接VCC(16位模式)
; #define DDR_DI DDRB
; #define DDR_DO DDRB
; #define DDR_CS DDRB
; #define DDR_SK DDRB
;
; #define PORT_DI PORTB
; #define PORT_DO PORTB
; #define PORT_CS PORTB
; #define PORT_SK PORTB
;
; #define PIN_DI PINB
; #define PIN_DO PINB
; #define PIN_CS PINB
; #define PIN_SK PINB
;
; #define set_di() PORT_DI |= (1<<DI)
; #define clr_di() PORT_DI &= ~(1<<DI)
; #define set_cs() PORT_CS |= (1<<CS)
; #define clr_cs() PORT_CS &= ~(1<<CS)
; #define set_sk() PORT_SK |= (1<<SK)
; #define clr_sk() PORT_SK &= ~(1<<SK)
;
;
; #define buzzer_on() DDRD |= (1<<2);PORTD |= (1<<2)
; #define buzzer_off() DDRD |= (1<<2);PORTD &= ~(1<<2)
;
; #define Green_off() DDRB |= (1<<0);PORTB |= (1<<0)
; #define Green_on() DDRB |= (1<<0);PORTB &= ~(1<<0)
; #define Red_off() DDRB |= (1<<1);PORTB |= (1<<1)
; #define Red_on() DDRB |= (1<<1);PORTB &= ~(1<<1)
;
; uint8_t Read(uint8_t add);
; void EW_enable(void);
; void EW_disable(void);
; void Erase(uint8_t add);
; void Erase_all(void);
; void Write(uint8_t add,uint8_t w_data);
; void IO_init(void);
; void Delay_ms(uint16_t ms);
; void Send_str_op(uint8_t op);
; void Send_bits(uint8_t s_data);
; void delay_us(void);
; /*********************************************/
; void main(void)
; {
.dbline 76
; uint8_t temp_1 = 0x00;
clr R20
.dbline 77
; nop;
nop
.dbline 78
; IO_init();
xcall _IO_init
xjmp L3
L2:
.dbline 80
; while (2)
; {
.dbline 81
; EW_enable(); //读写使能
xcall _EW_enable
.dbline 83
; //Erase(0x03);
; Write(0x01,0x28); //在地址为0X01的EEPROM中写入数据0x28
ldi R18,40
ldi R16,1
xcall _Write
.dbline 84
; nop;
nop
.dbline 85
; nop;
nop
.dbline 89
; //EW_disable();
; //Delay_ms(100);
; //EW_enable();
; temp_1 = Read(0x01); //读取地址为0X01的EEPROM中的数据
ldi R16,1
xcall _Read
mov R20,R16
.dbline 90
; nop;
nop
.dbline 91
; nop;
nop
.dbline 92
; EW_disable();
xcall _EW_disable
.dbline 93
; if (temp_1 == 0x28) //校验读取的数据是写入的
cpi R20,40
brne L5
.dbline 94
; {
.dbline 95
; Green_on(); //校验正确,绿色LED亮
sbi 0x17,0
.dbline 95
cbi 0x18,0
.dbline 96
; Red_off();
sbi 0x17,1
.dbline 96
sbi 0x18,1
.dbline 97
; }
xjmp L6
L5:
.dbline 99
; else
; {
.dbline 100
; Green_off(); //校验不正确,红色LED亮
sbi 0x17,0
.dbline 100
sbi 0x18,0
.dbline 101
; Red_on();
sbi 0x17,1
.dbline 101
cbi 0x18,1
.dbline 102
; }
L6:
.dbline 103
; for(;;)
L7:
.dbline 104
nop
.dbline 103
.dbline 103
xjmp L7
L3:
.dbline 79
xjmp L2
X0:
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r temp_1 20 c
.dbend
.dbfunc e IO_init _IO_init fV
.even
_IO_init::
.dbline -1
.dbline 109
; nop;
; }
; }
; /*********************************************/
; void IO_init(void)
; {
.dbline 110
; DDR_DI |= (1<<DI);
sbi 0x17,5
.dbline 111
; PORT_DI &= ~(1<<DI);
cbi 0x18,5
.dbline 112
; DDR_CS |= (1<<CS);
sbi 0x17,4
.dbline 113
; PORT_CS &= ~(1<<CS);
cbi 0x18,4
.dbline 114
; DDR_SK |= (1<<SK);
sbi 0x17,7
.dbline 115
; PORT_SK &= ~(1<<SK);
cbi 0x18,7
.dbline -2
L11:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay_us _delay_us fV
.even
_delay_us::
.dbline -1
.dbline 119
; }
; /*********************************************/
; void delay_us(void)
; {
.dbline 120
; nop;
nop
.dbline 121
; nop;
nop
.dbline 122
; nop;
nop
.dbline 123
; nop;
nop
.dbline -2
L12:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Send_str_op _Send_str_op fV
; i -> R20
; op -> R22
.even
_Send_str_op::
xcall push_gset2
mov R22,R16
.dbline -1
.dbline 133
; }
; /*********************************************/
; /*********************************************
; 函数功能:发送起始位和操作码
; 描 述:一个BIT的起始位+两个BIT的操作码
; 入口参数:OP
; 出口参数:无
; *********************************************/
; void Send_str_op(uint8_t op)
; {
.dbline 136
; uint8_t i;
; //===========start bit=================//
; set_di();
sbi 0x18,5
.dbline 137
; delay_us();
xcall _delay_us
.dbline 138
; set_sk();
sbi 0x18,7
.dbline 139
; delay_us();
xcall _delay_us
.dbline 140
; clr_sk();
cbi 0x18,7
.dbline 141
; delay_us();
xcall _delay_us
.dbline 143
; //===========send op code================//
; for (i=0;i<2;i++,op <<=1)
clr R20
xjmp L17
L14:
.dbline 144
; {
.dbline 145
; if (op & 0x80)
sbrs R22,7
rjmp L18
.dbline 146
; {
.dbline 147
; set_di();
sbi 0x18,5
.dbline 148
; }
xjmp L19
L18:
.dbline 150
; else
; {
.dbline 151
; clr_di();
cbi 0x18,5
.dbline 152
; }
L19:
.dbline 153
xcall _delay_us
.dbline 154
sbi 0x18,7
.dbline 155
xcall _delay_us
.dbline 156
cbi 0x18,7
.dbline 157
xcall _delay_us
.dbline 158
cbi 0x18,5
.dbline 159
L15:
.dbline 143
inc R20
lsl R22
L17:
.dbline 143
cpi R20,2
brlo L14
.dbline -2
L13:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r op 22 c
.dbend
.dbfunc e Send_bits _Send_bits fV
; temp_data -> R20
; i -> R22
; s_data -> R10
.even
_Send_bits::
xcall push_gset3
mov R10,R16
.dbline -1
.dbline 168
; delay_us();
; set_sk();
; delay_us();
; clr_sk();
; delay_us();
; clr_di();
; }
; }
; /*********************************************
; 函数功能:发送7个BIT
; 描 述:地址或其他
; 入口参数:s_data
; 出口参数:无
; *********************************************/
; void Send_bits(uint8_t s_data)
; {
.dbline 169
; uint8_t i,temp_data = 0;
clr R20
.dbline 170
; for (i=0;i<7;i++,s_data <<=1)
clr R22
xjmp L24
L21:
.dbline 171
; {
.dbline 172
; temp_data = s_data;
mov R20,R10
.dbline 173
; if (temp_data & 0x40) // xxxx'xxxx
sbrs R10,6
rjmp L25
.dbline 174
; { // &0100'0000
.dbline 175
; set_di();
sbi 0x18,5
.dbline 176
; }
xjmp L26
L25:
.dbline 178
; else
; {
.dbline 179
; clr_di();
cbi 0x18,5
.dbline 180
; }
L26:
.dbline 181
xcall _delay_us
.dbline 182
sbi 0x18,7
.dbline 183
xcall _delay_us
.dbline 184
cbi 0x18,7
.dbline 185
xcall _delay_us
.dbline 186
cbi 0x18,5
.dbline 187
L22:
.dbline 170
inc R22
lsl R10
L24:
.dbline 170
cpi R22,7
brlo L21
.dbline -2
L20:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r temp_data 20 c
.dbsym r i 22 c
.dbsym r s_data 10 c
.dbend
.dbfunc e Read _Read fc
; i -> R20
; read_data -> R22
; buffer -> R10
; add -> R20
.even
_Read::
xcall push_gset3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -