📄 twimain.lis
字号:
.module twimain.c
.area vector(rom, abs)
.org 34
0022 00C0 rjmp _twi_isr
.area data(ram, con, rel)
0000 _receive_data::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile E:\iccavr\无线+I2C\test1--sr\twimain.c
0001 .dbsym e receive_data _receive_data c
0001 _error_state::
0001 .blkb 1
.area idata
0001 00 .byte 0
.area data(ram, con, rel)
0002 .dbfile E:\iccavr\无线+I2C\test1--sr\twimain.c
0002 .dbsym e error_state _error_state c
0002 _slave_address::
0002 .blkb 1
.area idata
0002 C0 .byte 192
.area data(ram, con, rel)
0003 .dbfile E:\iccavr\无线+I2C\test1--sr\twimain.c
0003 .dbsym e slave_address _slave_address c
0003 _bit_race::
0003 .blkb 1
.area idata
0003 20 .byte 32
.area data(ram, con, rel)
0004 .dbfile E:\iccavr\无线+I2C\test1--sr\twimain.c
0004 .dbsym e bit_race _bit_race c
0004 _send_data::
0004 .blkb 1
.area idata
0004 02 .byte 2
.area data(ram, con, rel)
0005 .dbfile E:\iccavr\无线+I2C\test1--sr\twimain.c
0005 .dbsym e send_data _send_data c
0005 _trandata::
0005 .blkb 2
.area idata
0005 0001 .byte 0,1
.area data(ram, con, rel)
0007 .dbfile E:\iccavr\无线+I2C\test1--sr\twimain.c
0007 .blkb 2
.area idata
0007 0203 .byte 2,3
.area data(ram, con, rel)
0009 .dbfile E:\iccavr\无线+I2C\test1--sr\twimain.c
0009 .dbsym e trandata _trandata A[4:4]c
.area text(rom, con, rel)
0000 .dbfile E:\iccavr\无线+I2C\test1--sr\twimain.c
0000 .dbfunc e Delay_1ms _Delay_1ms fV
0000 ; i -> R16,R17
.even
0000 _Delay_1ms::
0000 .dbline -1
0000 .dbline 39
0000 ;
0000 ; /*函数的使用说明:
0000 ; 1.该twi模块包含四种工作模式,主发,主收,从收,从发,其中主发由
0000 ; twiWriteByte(从机地址,要发送的数据)实现,主收由twiReadByte(从机地址)实现,从机
0000 ; 的发送与接收均通过中断实现
0000 ; 2.在从机模式下,需调用twi_init()来使能并初始化twi总线
0000 ; 3.在主机模式下,调用twiWriteByte(从机地址,要发送的数据)向指定的从机写入数据,
0000 ; 调用twiReadByte(从机地址)从指定的从机读取数据,然后可通过查询错误状态error_state
0000 ; 的值决定下一步如何操作。
0000 ; */
0000 ;
0000 ; #include "twi.h"
0000 ;
0000 ; //TWI同程序的接口参数
0000 ; //receive_data,error_state不用设置
0000 ; char receive_data=0; // 接收到的数据
0000 ; char error_state=0; // twi错误状态
0000 ; //以下三个参数根据需求进行设置
0000 ; char slave_address=0xC0; // 设置从机地址,Bits 7..1:存放从机地址,Bit 0:最低位为广播识别使能位
0000 ; char bit_race=0x20; // 设置主机模式的比特率,SCL=CPU频率/(16+2*(TWBR)*4TWPS),TWPS在4的指数位置
0000 ; char send_data=0x02; // 从机发送模式下从机向主机发送的数据
0000 ; //要发送的数据
0000 ; char trandata[num] = {0x00,0x01,0x02,0x03};
0000 ; //*************************** twi错误状态说明*********************************
0000 ; // 0:twi传送无错误
0000 ; // 1:在主发模式下,SLA+W已发送,返回NOT ACK
0000 ; // 2:在主发模式下,DATA已发送,返回NOT ACK
0000 ; // 3:在主发模式下,SLA+W或者数据的仲裁失败
0000 ; // 4:在主收模式下,SLA+R或者数据的仲裁失败
0000 ; // 5:在主收模式下,SLA+R已发送,返回NOT ACK
0000 ; // 6:在主发模式下,START信号发送不成功
0000 ; // 7:在主收模式下,START信号发送不成功
0000 ; // 8:在主收模式下,数据接受完成
0000 ; // 9:在主收模式下,数据接受不成功
0000 ; //*****************************************************************************
0000 ; //*************************** 延时1ms 程序 *************************************
0000 ; //******************************************************************************
0000 ; void Delay_1ms(void)
0000 ; {
0000 .dbline 41
0000 0027 clr R16
0002 1127 clr R17
0004 02C0 rjmp L5
0006 L2:
0006 .dbline 41
0006 L3:
0006 .dbline 41
0006 0F5F subi R16,255 ; offset = 1
0008 1F4F sbci R17,255
000A L5:
000A .dbline 41
000A ; unsigned int i;
000A ; for(i = 0;i < (unsigned int)11 * 143 - 2;i ++);
000A 0332 cpi R16,35
000C E6E0 ldi R30,6
000E 1E07 cpc R17,R30
0010 D0F3 brlo L2
0012 .dbline -2
0012 .dbline 42
0012 ; }
0012 L1:
0012 .dbline 0 ; func end
0012 0895 ret
0014 .dbsym r i 16 i
0014 .dbend
0014 .dbfunc e Delay_Nms _Delay_Nms fV
0014 ; j -> R20,R21
0014 ; i -> R22,R23
.even
0014 _Delay_Nms::
0014 00D0 rcall push_gset2
0016 B801 movw R22,R16
0018 .dbline -1
0018 .dbline 46
0018 ; //*************************** 延时1s 程序 **************************************
0018 ; //******************************************************************************
0018 ; void Delay_Nms(unsigned int i)
0018 ; {
0018 .dbline 48
0018 ; unsigned int j;
0018 ; for(j = 0;j < i;j ++)
0018 4427 clr R20
001A 5527 clr R21
001C 03C0 rjmp L10
001E L7:
001E .dbline 49
001E F0DF rcall _Delay_1ms
0020 L8:
0020 .dbline 48
0020 4F5F subi R20,255 ; offset = 1
0022 5F4F sbci R21,255
0024 L10:
0024 .dbline 48
0024 4617 cp R20,R22
0026 5707 cpc R21,R23
0028 D0F3 brlo L7
002A .dbline -2
002A .dbline 50
002A ; Delay_1ms();
002A ; }
002A L6:
002A 00D0 rcall pop_gset2
002C .dbline 0 ; func end
002C 0895 ret
002E .dbsym r j 20 i
002E .dbsym r i 22 i
002E .dbend
002E .dbfunc e port_init _port_init fV
.even
002E _port_init::
002E .dbline -1
002E .dbline 54
002E ; //*************************** I/O 初始化****************************************
002E ; //******************************************************************************
002E ; void port_init(void)
002E ; {
002E .dbline 55
002E ; PORTB = 0x2f; //置PB0,PB1,PB2,PB3,PB5为1,PB4,PB6,PB7为0
002E 8FE2 ldi R24,47
0030 88BB out 0x18,R24
0032 .dbline 56
0032 ; DDRB = 0x2f; //置PB0,PB1,PB2--SS,PB3--MOSI,PB5--SCK为输出,PB4--MISO为输入
0032 87BB out 0x17,R24
0034 .dbline 57
0034 ; PORTC = 0x0f;
0034 8FE0 ldi R24,15
0036 85BB out 0x15,R24
0038 .dbline 58
0038 ; DDRC = 0x0f; //PC4--SDA,PC5--SCL为输入,PC0--PC3全为输出以便测试
0038 84BB out 0x14,R24
003A .dbline 59
003A ; PORTD = 0x05; //置PWR,TXEN为1, TRXCE为0
003A 85E0 ldi R24,5
003C 82BB out 0x12,R24
003E .dbline 60
003E ; DDRD = 0x07; //置PD3,PD4,PD5输入;PD2--PWR,PD0--TXEN,PD1--TRXCE输出
003E 87E0 ldi R24,7
0040 81BB out 0x11,R24
0042 .dbline -2
0042 .dbline 61
0042 ; }
0042 L11:
0042 .dbline 0 ; func end
0042 0895 ret
0044 .dbend
0044 .dbfunc e uart0_init _uart0_init fV
.even
0044 _uart0_init::
0044 .dbline -1
0044 .dbline 70
0044 ; //******************************串口程序****************************************
0044 ; //******************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -