📄 128l_usart.lst
字号:
010C 2777 CLR R23
010D C002 RJMP 0x0110
010E 5F6F SUBI R22,0xFF
010F 4F7F SBCI R23,0xFF
0110 1760 CP R22,R16
0111 0771 CPC R23,R17
0112 F3DC BLT 0x010E
0113 5F4F SUBI R20,0xFF
0114 4F5F SBCI R21,0xFF
0115 1740 CP R20,R16
0116 0751 CPC R21,R17
0117 F39C BLT 0x010B
0118 940E0182 CALL pop_gset2
011A 9508 RET
(0094) }
(0095)
(0096) //////////////////////////////////////////////////////////
(0097) /*led_on_off()
(0098) /*LED的开和关闭
(0099) */
(0100) void led_on_off(BYTE led_flag)
(0101) {
(0102) //设置PC0口为输出0,点亮LED
(0103) if(led_flag==1)
_led_on_off:
led_flag --> R16
011B 3001 CPI R16,1
011C F439 BNE 0x0124
(0104) {
(0105) PBO.B4=0 ;
011D B388 IN R24,0x18
011E 7E8F ANDI R24,0xEF
011F BB88 OUT 0x18,R24
(0106) PBD.B4=1 ;
0120 B387 IN R24,0x17
0121 6180 ORI R24,0x10
0122 BB87 OUT 0x17,R24
(0107) }
0123 C006 RJMP 0x012A
(0108) //设置PC0口为输出1,关闭LED
(0109) else
(0110) {
(0111) PBO.B4=1 ;
0124 B388 IN R24,0x18
0125 6180 ORI R24,0x10
0126 BB88 OUT 0x18,R24
(0112) PBD.B4=1 ;
0127 B387 IN R24,0x17
0128 6180 ORI R24,0x10
0129 BB87 OUT 0x17,R24
(0113) }
012A 9508 RET
_led_response:
i --> R20
t --> R22
012B 940E018B CALL push_gset2
012D 01B8 MOVW R22,R16
(0114) }
(0115)
(0116) void led_response (int t)
(0117) {
(0118) int i;
(0119) for(i = 0;i < t;i++)
012E 2744 CLR R20
012F 2755 CLR R21
0130 C00C RJMP 0x013D
(0120) {
(0121) led_on_off(ON); //点亮LED灯
0131 E001 LDI R16,1
0132 DFE8 RCALL _led_on_off
(0122) delay(150);
0133 E906 LDI R16,0x96
0134 E010 LDI R17,0
0135 DFD0 RCALL _delay
(0123) led_on_off(OFF); //关闭LED灯
0136 2700 CLR R16
0137 DFE3 RCALL _led_on_off
(0124) delay(150);
0138 E906 LDI R16,0x96
0139 E010 LDI R17,0
013A DFCB RCALL _delay
013B 5F4F SUBI R20,0xFF
013C 4F5F SBCI R21,0xFF
013D 1746 CP R20,R22
013E 0757 CPC R21,R23
013F F38C BLT 0x0131
0140 940E0182 CALL pop_gset2
0142 9508 RET
(0125) }
(0126) }
(0127)
(0128) void SPI_MasterInit(void)
(0129) {
(0130) /* 设置MOSI 和SCK 片选为输出,其他为输入 */
(0131) PORTB |= (1<<PB3) | (1<<PB4) | (1<<PB5) | (1<<PB6);
_SPI_MasterInit:
0143 B388 IN R24,0x18
0144 6788 ORI R24,0x78
0145 BB88 OUT 0x18,R24
(0132) DDRB = (1<<DDB2)|(1<<DDB1)|(1<<DDB0);
0146 E087 LDI R24,7
0147 BB87 OUT 0x17,R24
(0133) /* 使能SPI 主机模式,设置时钟速率为fck/16 */
(0134) SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
0148 E581 LDI R24,0x51
0149 B98D OUT 0x0D,R24
014A 9508 RET
(0135) }
(0136) void SPI_MasterTransmit(char cData)
(0137) {
(0138) PORTB &=~ (1<<PB0); //强制接收方进入从模式
_SPI_MasterTransmit:
cData --> R16
014B 98C0 CBI 0x18,0
(0139) SPCR |= (1<<MSTR); // MSTR有时会被清零,这里强制进入主机模式
014C 9A6C SBI 0x0D,4
(0140) /* 启动数据传输 */
(0141) SPDR = cData;
014D B90F OUT 0x0F,R16
(0142) /* 等待传输结束 */
(0143) while(!(SPSR & (1<<SPIF)));
014E 9B77 SBIS 0x0E,7
014F CFFE RJMP 0x014E
0150 9508 RET
FILE: F:\我的BACK\淘宝\128开发板\程序\128L_USART1\debug.c
(0001) #include "config.h"
(0002)
(0003)
(0004) void Usart0_byte( BYTE OneByte )
(0005) {
(0006) while ( ! (UCSR0A & (1 << UDRE0) ) ); /* Waiting for empty transmit buffer */
_Usart0_byte:
OneByte --> R16
0151 9B5D SBIS 0x0B,5
0152 CFFE RJMP _Usart0_byte
(0007) UDR0 = OneByte;
0153 B90C OUT 0x0C,R16
(0008) while( ! (UCSR0A & (1 << TXC0) ) );
0154 9B5E SBIS 0x0B,6
0155 CFFE RJMP 0x0154
0156 9508 RET
(0009) }
(0010) void Usart1_byte(BYTE OneByte)
(0011) {
(0012) /*///while (!CHECK_BIT(UCSR0A,1<<UDRE0));
(0013) int i,j;
(0014) UDR0 = data ;
(0015) for(i=0;i<200;i++)
(0016) for(j=0;j<200;j++);
(0017) ///while (!CHECK_BIT(UCSR0A, 1<<TXC0));
(0018)
(0019) return 0;*/
(0020) while ( ! (UCSR1A & (1 << UDRE1) ) ); /* Waiting for empty transmit buffer */
_Usart1_byte:
OneByte --> R16
0157 9020009B LDS R2,0x9B
0159 FE25 SBRS R2,5
015A CFFC RJMP _Usart1_byte
(0021) UDR1 = OneByte;
015B 9300009C STS 0x9C,R16
(0022) while( ! (UCSR1A & (1 << TXC1) ) );
015D 9020009B LDS R2,0x9B
015F FE26 SBRS R2,6
0160 CFFC RJMP 0x015D
0161 9508 RET
_debug0_Print:
buf --> R20
0162 940E018D CALL push_gset1
0164 01A8 MOVW R20,R16
(0023) }
(0024)
(0025)
(0026) void debug0_Print(char* buf)
(0027) {
0165 C005 RJMP 0x016B
(0028) while ( *buf != '\0' )
(0029) {
(0030) Usart0_byte( *buf );
0166 01FA MOVW R30,R20
0167 8100 LDD R16,Z+0
0168 DFE8 RCALL _Usart0_byte
(0031) buf++;
0169 5F4F SUBI R20,0xFF
016A 4F5F SBCI R21,0xFF
016B 01FA MOVW R30,R20
016C 8020 LDD R2,Z+0
016D 2022 TST R2
016E F7B9 BNE 0x0166
016F 940E0190 CALL pop_gset1
0171 9508 RET
_debug1_Print:
buf --> R20
0172 940E018D CALL push_gset1
0174 01A8 MOVW R20,R16
(0032) }
(0033) }
(0034)
(0035) void debug1_Print(char* buf)
(0036) {
0175 C005 RJMP 0x017B
(0037) while ( *buf != '\0' )
(0038) {
(0039) Usart1_byte( *buf );
0176 01FA MOVW R30,R20
0177 8100 LDD R16,Z+0
0178 DFDE RCALL _Usart1_byte
(0040) buf++;
FILE: <library>
0179 5F4F SUBI R20,0xFF
017A 4F5F SBCI R21,0xFF
017B 01FA MOVW R30,R20
017C 8020 LDD R2,Z+0
017D 2022 TST R2
017E F7B9 BNE 0x0176
017F 940E0190 CALL pop_gset1
0181 9508 RET
pop_gset2:
0182 E0E2 LDI R30,2
0183 940C0191 JMP pop
push_gset5:
0185 92FA ST R15,-Y
0186 92EA ST R14,-Y
push_gset4:
0187 92DA ST R13,-Y
0188 92CA ST R12,-Y
push_gset3:
0189 92BA ST R11,-Y
018A 92AA ST R10,-Y
push_gset2:
018B 937A ST R23,-Y
018C 936A ST R22,-Y
push_gset1:
018D 935A ST R21,-Y
018E 934A ST R20,-Y
018F 9508 RET
pop_gset1:
0190 E0E1 LDI R30,1
pop:
0191 9149 LD R20,Y+
0192 9159 LD R21,Y+
0193 FDE0 SBRC R30,0
0194 9508 RET
0195 9169 LD R22,Y+
0196 9179 LD R23,Y+
0197 FDE1 SBRC R30,1
0198 9508 RET
0199 90A9 LD R10,Y+
019A 90B9 LD R11,Y+
019B FDE2 SBRC R30,2
019C 9508 RET
019D 90C9 LD R12,Y+
019E 90D9 LD R13,Y+
019F FDE3 SBRC R30,3
01A0 9508 RET
01A1 90E9 LD R14,Y+
01A2 90F9 LD R15,Y+
01A3 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -