📄 uart_to_twi_m8.s
字号:
.even
_show_data::
rcall push_gset2
mov R20,R16
.dbline -1
.dbline 188
; }
; /************************************************************************
; 通用的,,用来显示一个变量的值,,送到串口来
; *************************************************************************/
; void show_data(unsigned char dat)
; {
.dbline 191
; unsigned char dat_buff;
;
; dat_buff = dat;
mov R22,R20
.dbline 192
; dat >>= 4;
mov R24,R20
swap R24
andi R24,#0x0F
mov R20,R24
.dbline 193
; dat = dat & 0x0f;
andi R20,15
.dbline 194
; dat = general_hex_to_ascii( dat );
mov R16,R20
rcall _general_hex_to_ascii
.dbline 195
; USART_TransmitByte(dat);
rcall _USART_TransmitByte
.dbline 196
; dat = dat_buff;
mov R20,R22
.dbline 197
; dat = dat & 0x0f;
andi R20,15
.dbline 198
; dat = general_hex_to_ascii( dat );
mov R16,R20
rcall _general_hex_to_ascii
mov R20,R16
.dbline 199
; USART_TransmitByte(dat);
rcall _USART_TransmitByte
.dbline -2
L53:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r dat_buff 22 c
.dbsym r dat 20 c
.dbend
.dbfunc e twi_transmint _twi_transmint fV
; dat1_buff -> <dead>
; dat1 -> R20
; dat2 -> R20
.even
_twi_transmint::
rcall push_gset1
sbiw R28,1
.dbline -1
.dbline 203
; }
; //>>>>>>>>>>>>>>>>做包
; void twi_transmint(void)
; {
.dbline 207
; unsigned char dat1,dat2;
; unsigned char dat1_buff;
;
; if(Twi_Hex_Data_Flag == true)
lds R24,_Twi_Hex_Data_Flag
cpi R24,1
breq X3
rjmp L55
X3:
.dbline 208
; {
.dbline 210
;
; Twi_Hex_Data_Flag = false;
clr R2
sts _Twi_Hex_Data_Flag,R2
.dbline 211
; if(Twi_Write_Flag == true)
lds R24,_Twi_Write_Flag
cpi R24,1
brne L57
.dbline 212
; {
.dbline 213
; Twi_Write_Flag = false;
sts _Twi_Write_Flag,R2
.dbline 214
; dat1 = twi_write_byte(Twi_Hex_Data[0],Twi_Hex_Data[1],Twi_Hex_Data[2]);
lds R2,_Twi_Hex_Data+2
std y+0,R2
lds R18,_Twi_Hex_Data+1
lds R16,_Twi_Hex_Data
rcall _twi_write_byte
mov R20,R16
.dbline 222
;
; #ifdef test
; //显示TWI状态字
; show_data(dat1);
; USART_Transmit("this is write!");
; #endif
;
; if(Write_Succsee_Flag == true)
lds R24,_Write_Succsee_Flag
cpi R24,1
brne L61
.dbline 223
; {
.dbline 224
; Write_Succsee_Flag = false;
clr R2
sts _Write_Succsee_Flag,R2
.dbline 226
;
; USART_Transmit(UART_TX_buff);//写成功
ldi R16,<_UART_TX_buff
ldi R17,>_UART_TX_buff
rcall _USART_Transmit
.dbline 230
; #ifdef test
; USART_Transmit("write successfully!");
; #endif
; }
rjmp L62
L61:
.dbline 232
; else
; {
.dbline 233
; USART_Transmit(Write_Error);//写不成功
ldi R16,<_Write_Error
ldi R17,>_Write_Error
rcall _USART_Transmit
.dbline 237
; #ifdef test
; USART_Transmit("write error!");
; #endif
; }
L62:
.dbline 238
; WDR();
wdr
.dbline 239
; }
L57:
.dbline 240
; if(Twi_Read_Flag == true)
lds R24,_Twi_Read_Flag
cpi R24,1
brne L63
.dbline 241
; {
.dbline 242
; Twi_Read_Flag = false;
clr R2
sts _Twi_Read_Flag,R2
.dbline 243
; dat2 = twi_read_byte(Twi_Hex_Data[0],Twi_Hex_Data[1]);
lds R18,_Twi_Hex_Data+1
lds R16,_Twi_Hex_Data
rcall _twi_read_byte
mov R20,R16
.dbline 249
; #ifdef test
; show_data(dat2);
; USART_Transmit("this is read!");
; #endif
;
; if(Read_Succsee_Flag != true)
lds R24,_Read_Succsee_Flag
cpi R24,1
breq L66
.dbline 250
; {
.dbline 251
; USART_Transmit(Read_Error);//读失败
ldi R16,<_Read_Error
ldi R17,>_Read_Error
rcall _USART_Transmit
.dbline 255
; #ifdef test
; USART_Transmit("read error!");
; #endif
; }
rjmp L67
L66:
.dbline 257
; else
; {
.dbline 258
; Read_Succsee_Flag = false;
clr R2
sts _Read_Succsee_Flag,R2
.dbline 260
;
; hex_to_ascii(dat2);//读成功 且读的数在dat2中
mov R16,R20
rcall _hex_to_ascii
.dbline 261
; USART_Transmit(UART_TX_buff);
ldi R16,<_UART_TX_buff
ldi R17,>_UART_TX_buff
rcall _USART_Transmit
.dbline 265
; #ifdef test
; USART_Transmit("read successfully!");
; #endif
; }
L67:
.dbline 266
; WDR();
wdr
.dbline 267
; }
L63:
.dbline 268
L55:
.dbline -2
L54:
adiw R28,1
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym l dat1_buff 2 c
.dbsym r dat1 20 c
.dbsym r dat2 20 c
.dbend
.dbfunc e init_data _init_data fV
.even
_init_data::
.dbline -1
.dbline 272
; }
; }
;
; void init_data(void)
; {
.dbline 273
; Twi_Write_Flag = false;
clr R2
sts _Twi_Write_Flag,R2
.dbline 274
; Twi_Read_Flag = false;
sts _Twi_Read_Flag,R2
.dbline 275
; Twi_Hex_Data_Flag = false;
sts _Twi_Hex_Data_Flag,R2
.dbline 276
; Twi_ASCI_Data_Flag = false;
sts _Twi_ASCI_Data_Flag,R2
.dbline 277
; Slave_Led_Status = LED_OFF;
sts _Slave_Led_Status,R2
.dbline 278
; Main_Led_Status = LED_OFF;
sts _Main_Led_Status,R2
.dbline 279
; Cur_Main_Led_Status= LED_OFF;
sts _Cur_Main_Led_Status,R2
.dbline 280
; Count_10ms = 0;
sts _Count_10ms,R2
.dbline 281
; WDR();
wdr
.dbline -2
L68:
.dbline 0 ; func end
ret
.dbend
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 284
; }
; void port_init(void)
; {
.dbline 285
; PORTB = 0x3F;
ldi R24,63
out 0x18,R24
.dbline 286
; DDRB = 0x00;
clr R2
out 0x17,R2
.dbline 287
; PORTC = 0x4F; //m103 output only
ldi R24,79
out 0x15,R24
.dbline 288
; DDRC = 0x00;
out 0x14,R2
.dbline 289
; PORTD = 0xFC;
ldi R24,252
out 0x12,R24
.dbline 290
; DDRD = 0x00;
out 0x11,R2
.dbline -2
L69:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 294
; }
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
.dbline 296
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 297
; port_init();
rcall _port_init
.dbline 298
; uart0_init();
rcall _uart0_init
.dbline 299
; twi_init();
rcall _twi_init
.dbline 300
; timer0_init();
rcall _timer0_init
.dbline 301
; watchdog_init();
rcall _watchdog_init
.dbline 303
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 304
; GICR = 0x00;
out 0x3b,R2
.dbline 305
; TIMSK = 0x00; //timer interrupt sources
out 0x39,R2
.dbline 306
; SEI(); //re-enable interrupts
sei
.dbline -2
L70:
.dbline 0 ; func end
ret
.dbend
.dbfunc e check_watchdog _check_watchdog fV
.even
_check_watchdog::
.dbline -1
.dbline 310
; //all peripherals are now initialized
; }
; void check_watchdog(void)
; {
.dbline 311
; WDR();//喂狗
wdr
.dbline -2
L71:
.dbline 0 ; func end
ret
.dbend
.dbfunc e watchdog_init _watchdog_init fV
.even
_watchdog_init::
.dbline -1
.dbline 314
; }
; void watchdog_init(void)
; {
.dbline 315
; WDR();//看门狗计数清零
wdr
.dbline 316
; WDTCR=((1<<WDE)|(1<<WDP2)|(1<<WDP0));//64K分频,0.52S
ldi R24,13
out 0x21,R24
.dbline -2
L72:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer0_init _timer0_init fV
.even
_timer0_init::
.dbline -1
.dbline 324
; //WDIE是看门狗中断使能,WDE看门狗使能 101 512k
; }
;
; //TIMER0 initialize - prescale:256
; // desired value: 100Hz
; // actual value: 100.000Hz (0.0%)
; void timer0_init(void)
; {
.dbline 325
; TCCR0 = 0x00; //stop
clr R2
out 0x33,R2
.dbline 326
; TCNT0 = 0x4C; //set count
ldi R24,76
out 0x32,R24
.dbline 327
; TCCR0 = 0x04; //start timer
ldi R24,4
out 0x33,R24
.dbline -2
L73:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 18
rjmp _timer0_ovf_isr
.area text(rom, con, rel)
.dbfile F:\UART_TO_TWI\uart_to_twi_m8.c
.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
.even
_timer0_ovf_isr::
st -y,R2
st -y,R24
st -y,R25
in R2,0x3f
st -y,R2
.dbline -1
.dbline 332
; }
;
; #pragma interrupt_handler timer0_ovf_isr:10
; void timer0_ovf_isr(void)
; {
.dbline 333
; TCNT0 = 0x4C; //reload counter value
ldi R24,76
out 0x32,R24
.dbline 335
; //主灯
; Count_10ms++;
lds R24,_Count_10ms
subi R24,255 ; addi 1
sts _Count_10ms,R24
.dbline 336
; if((Count_10ms>0)&&(Count_10ms<5))
clr R2
cp R2,R24
brsh L75
cpi R24,5
brsh L75
.dbline 337
; {
.dbline 338
; Cur_Main_Led_Status = LED_ON;
ldi R24,1
sts _Cur_Main_Led_Status,R24
.dbline 339
; }
L75:
.dbline 340
ldi R24,5
lds R2,_Count_10ms
cp R24,R2
brsh L77
mov R24,R2
cpi R24,10
brsh L77
.dbline 341
.dbline 342
clr R2
sts _Cur_Main_Led_Status,R2
.dbline 343
L77:
.dbline -2
L74:
ld R2,y+
out 0x3f,R2
ld R25,y+
ld R24,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e check_main_led _check_main_led fV
.even
_check_main_led::
.dbline -1
.dbline 346
; if((Count_10ms>5)&&(Count_10ms<10))
; {
; Cur_Main_Led_Status = LED_OFF;
; }
; }
; void check_main_led(void)
; {
.dbline 347
; if(Main_Led_Status != Cur_Main_Led_Status)
lds R2,_Cur_Main_Led_Status
lds R3,_Main_Led_Status
cp R3,R2
breq L80
.dbline 348
; {
.dbline 349
; if(Main_Led_Status == LED_ON) Main_Led_Off();
mov R24,R3
cpi R24,1
brne L82
.dbline 349
sbi 0x12,3
rjmp L83
L82:
.dbline 350
; else Main_Led_On();
cbi 0x12,3
L83:
.dbline 351
lds R2,_Cur_Main_Led_Status
sts _Main_Led_Status,R2
.dbline 352
L80:
.dbline -2
L79:
.dbline 0 ; func end
ret
.dbend
.dbfunc e check_slave_led _check_slave_led fV
.even
_check_slave_led::
.dbline -1
.dbline 355
; Main_Led_Status = Cur_Main_Led_Status;
; }
; }
; void check_slave_led(void)
; {
.dbline 356
; if(Slave_Led_Status == LED_ON)
lds R24,_Slave_Led_Status
cpi R24,1
brne L85
.dbline 357
; {
.dbline 358
; Slave_Led_On();
cbi 0x12,2
.dbline 359
; }
rjmp L86
L85:
.dbline 361
.dbline 362
sbi 0x12,2
.dbline 363
L86:
.dbline -2
L84:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile F:\UART_TO_TWI\uart_to_twi_m8.c
_Count_10ms::
.blkb 1
.dbsym e Count_10ms _Count_10ms c
_Cur_Main_Led_Status::
.blkb 1
.dbsym e Cur_Main_Led_Status _Cur_Main_Led_Status c
_Main_Led_Status::
.blkb 1
.dbsym e Main_Led_Status _Main_Led_Status c
_Slave_Led_Status::
.blkb 1
.dbsym e Slave_Led_Status _Slave_Led_Status c
_Twi_Hex_Data_Flag::
.blkb 1
.dbsym e Twi_Hex_Data_Flag _Twi_Hex_Data_Flag c
_Twi_ASCI_Data_Flag::
.blkb 1
.dbsym e Twi_ASCI_Data_Flag _Twi_ASCI_Data_Flag c
_Twi_Read_Flag::
.blkb 1
.dbsym e Twi_Read_Flag _Twi_Read_Flag c
_Twi_Write_Flag::
.blkb 1
.dbsym e Twi_Write_Flag _Twi_Write_Flag c
_Twi_ASCI_Data::
.blkb 6
.dbsym e Twi_ASCI_Data _Twi_ASCI_Data A[6:6]c
_Twi_Hex_Data::
.blkb 3
.dbsym e Twi_Hex_Data _Twi_Hex_Data A[3:3]c
.area data(ram, con, rel)
.dbfile F:\UART_TO_TWI\uart_to_twi_m8.c
L2:
.blkb 9
.area idata
.byte 'r,'e,'a,'d,32,'g,'o,33,0
.area data(ram, con, rel)
.dbfile F:\UART_TO_TWI\uart_to_twi_m8.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -