📄 master_1.s
字号:
.module master_1.c
.area data(ram, con, rel)
_Date::
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.dbfile D:\AVR\代码\ICCdaima\TWI/UART.h
.dbsym e Date _Date A[4:4]c
.area text(rom, con, rel)
.dbfile D:\AVR\代码\ICCdaima\TWI/UART.h
.dbfile D:\AVR\代码\ICCdaima\TWI\master_1.c
.dbfunc e Start _Start fV
.even
_Start::
.dbline -1
.dbline 17
; #include"iom8v.h"
; #include"UART.h"
; #define uchar unsigned char
; #define STATUS (TWSR&0xf8)
; #define SLA_W 0x32
; #define SLA_R 0x33
; #define SLAVER_ADDRESS 0x32
; #define START 0x08
; #define RE_START 0x10
; #define MT_SLA_WRITE_ACK 0x18
; #define MT_SLA_READ_ACK 0x40
; #define MT_DATA_ACK 0x28
; #define MT_READ_ACK 0x58
;
;
; void Start(void)
; {
.dbline 18
; TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
ldi R24,164
out 0x36,R24
L2:
.dbline 19
L3:
.dbline 19
; while(!(TWCR&(1<<TWINT)));
in R2,0x36
sbrs R2,7
rjmp L2
.dbline -2
.dbline 20
; }
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Stop _Stop fV
.even
_Stop::
.dbline -1
.dbline 22
; void Stop(void)
; {
.dbline 23
; TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
ldi R24,148
out 0x36,R24
.dbline -2
.dbline 24
; }
L5:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Load _Load fV
; i -> R16
.even
_Load::
.dbline -1
.dbline 26
; void Load(uchar i)
; {
.dbline 27
; TWDR=i;
out 0x3,R16
.dbline 28
; TWCR=(1<<TWINT)|(1<<TWEN);
ldi R24,132
out 0x36,R24
L7:
.dbline 29
L8:
.dbline 29
; while(!(TWCR&(1<<TWINT)));
in R2,0x36
sbrs R2,7
rjmp L7
.dbline -2
.dbline 31
;
; }
L6:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.dbfunc e Get _Get fV
; d -> R16,R17
.even
_Get::
.dbline -1
.dbline 34
;
; void Get(unsigned char *d)
; {
.dbline 35
; TWCR=(1<<TWINT)|(1<<TWEN);
ldi R24,132
out 0x36,R24
L11:
.dbline 36
L12:
.dbline 36
; while(!(TWCR&(1<<TWINT)));
in R2,0x36
sbrs R2,7
rjmp L11
.dbline 37
; *d= TWDR;
in R2,0x3
movw R30,R16
std z+0,R2
.dbline -2
.dbline 38
; }
L10:
.dbline 0 ; func end
ret
.dbsym r d 16 pc
.dbend
.dbfunc e ERROR _ERROR fV
; state -> R20
.even
_ERROR::
rcall push_gset1
mov R20,R16
.dbline -1
.dbline 40
; void ERROR(uchar state)
; {Stop();
.dbline 40
rcall _Stop
.dbline -2
.dbline 41
; }
L14:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r state 20 c
.dbend
.dbfunc e SendByte _SendByte fc
; data -> R20
.even
_SendByte::
rcall push_gset1
mov R20,R16
.dbline -1
.dbline 46
;
; /*写一个字节data,成功则返回1,否则
; 返回0*/
; uchar SendByte(uchar data)
; {
.dbline 48
; //启动I2C
; Start();
rcall _Start
.dbline 49
; if(STATUS!=START) //{ERROR(STATUS);return 0;}
in R24,0x1
andi R24,248
cpi R24,8
breq L16
.dbline 50
; puts("Start ERRor");
ldi R16,<L18
ldi R17,>L18
rcall _puts
L16:
.dbline 52
; //发送从机地址(写),等待回应, 错误检测
; Load(0);
clr R16
rcall _Load
.dbline 53
; if(STATUS!=MT_SLA_WRITE_ACK) //{ERROR(STATUS);return 0;}
in R24,0x1
andi R24,248
cpi R24,24
breq L19
.dbline 54
; puts("SLA_W RROR");
ldi R16,<L21
ldi R17,>L21
rcall _puts
L19:
.dbline 61
; /*
; //发送EEPROM地址,等待回应,错误检测
; Load(addr);
; if(STATUS!=MT_DATA_ACK) {ERROR(STATUS);return 0;}
; */
; //发送数据,等待回应,错误检测
; Load(data);
mov R16,R20
rcall _Load
.dbline 62
; if(STATUS!=MT_DATA_ACK) //{ERROR(STATUS);return 0;}
in R24,0x1
andi R24,248
cpi R24,40
breq L22
.dbline 63
; puts("Date Error");
ldi R16,<L24
ldi R17,>L24
rcall _puts
L22:
.dbline 64
; Stop();
rcall _Stop
.dbline 65
; return 1;//发送成功,返回1;
ldi R16,1
.dbline -2
L15:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r data 20 c
.dbend
.dbfunc e Init_Io _Init_Io fV
.even
_Init_Io::
.dbline -1
.dbline 70
;
; }
;
; void Init_Io(void)
; {
.dbline 71
; DDRC&=~((1<<PC4)&(1<<PC5)&(1<<PC2));
in R24,0x14
andi R24,255
out 0x14,R24
.dbline 72
; PORTC|= (1<<PC4)|(1<<PC5)|(1<<PC2);
in R24,0x15
ori R24,52
out 0x15,R24
.dbline 73
; TWCR=(1<<TWEA)|(1<<TWEN); //主机模式,使能TWI
ldi R24,68
out 0x36,R24
.dbline 74
; TWBR=32;//波特率 100K 8M晶振
ldi R24,32
out 0x0,R24
.dbline -2
.dbline 75
; }
L25:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; temp -> R20
.even
_main::
.dbline -1
.dbline 77
; void main()
; {
.dbline 79
; uchar temp;
; Init_Io();
rcall _Init_Io
.dbline 80
; uart_init();
rcall _uart_init
.dbline 81
; puts("串口工作");
ldi R16,<L27
ldi R17,>L27
rcall _puts
rjmp L29
L28:
.dbline 83
; while(1)
; for(temp=0;temp<10;temp++)
clr R20
rjmp L34
L31:
.dbline 84
.dbline 85
mov R16,R20
subi R16,208 ; addi 48
rcall _SendByte
.dbline 86
ldi R16,10
ldi R17,0
rcall _Delay_nms
.dbline 87
L32:
.dbline 83
inc R20
L34:
.dbline 83
cpi R20,10
brlo L31
L29:
.dbline 82
rjmp L28
X0:
.dbline -2
.dbline 89
; {
; SendByte(temp+0x30);
; Delay_nms(10);
; }
;
; }
L26:
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbend
.area data(ram, con, rel)
.dbfile D:\AVR\代码\ICCdaima\TWI\master_1.c
L27:
.blkb 9
.area idata
.byte 180,174,191,218,185,164,215,247,0
.area data(ram, con, rel)
.dbfile D:\AVR\代码\ICCdaima\TWI\master_1.c
L24:
.blkb 11
.area idata
.byte 'D,'a,'t,'e,32,'E,'r,'r,'o,'r,0
.area data(ram, con, rel)
.dbfile D:\AVR\代码\ICCdaima\TWI\master_1.c
L21:
.blkb 11
.area idata
.byte 'S,'L,'A,95,'W,32,'R,'R,'O,'R,0
.area data(ram, con, rel)
.dbfile D:\AVR\代码\ICCdaima\TWI\master_1.c
L18:
.blkb 12
.area idata
.byte 'S,'t,'a,'r,'t,32,'E,'R,'R,'o,'r,0
.area data(ram, con, rel)
.dbfile D:\AVR\代码\ICCdaima\TWI\master_1.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -