📄 test.lss
字号:
198: 81 2f mov r24, r17
19a: 80 7f andi r24, 0xF0 ; 240
19c: da df rcall .-76 ; 0x152
write_byte((command&0x0F)<<4); //发送L_data
19e: 81 2f mov r24, r17
1a0: 82 95 swap r24
1a2: 80 7f andi r24, 0xF0 ; 240
1a4: d6 df rcall .-84 ; 0x152
CLR_CS;
1a6: ad 98 cbi 0x15, 5 ; 21
1a8: 1f 91 pop r17
1aa: 08 95 ret
000001ac <write_data>:
}
/************************数据写入函数***************************/
void write_data(unsigned char Data) //写数据
{
1ac: 1f 93 push r17
1ae: 18 2f mov r17, r24
SET_CS;
1b0: ad 9a sbi 0x15, 5 ; 21
write_byte(0xFA); //发送S_ID
1b2: 8a ef ldi r24, 0xFA ; 250
1b4: ce df rcall .-100 ; 0x152
write_byte(Data&0xF0); //发送H_data
1b6: 81 2f mov r24, r17
1b8: 80 7f andi r24, 0xF0 ; 240
1ba: cb df rcall .-106 ; 0x152
write_byte((Data&0x0F)<<4); //发送L_data
1bc: 81 2f mov r24, r17
1be: 82 95 swap r24
1c0: 80 7f andi r24, 0xF0 ; 240
1c2: c7 df rcall .-114 ; 0x152
CLR_CS;
1c4: ad 98 cbi 0x15, 5 ; 21
1c6: 1f 91 pop r17
1c8: 08 95 ret
000001ca <LCD_Init>:
}
/************************LCD初始化函数***************************/
void LCD_Init(void) //LCD初始化
{
delay(200);
1ca: 88 ec ldi r24, 0xC8 ; 200
1cc: 90 e0 ldi r25, 0x00 ; 0
1ce: da df rcall .-76 ; 0x184
write_command(0x30); //功能设置 8位数据,基本指令集
1d0: 80 e3 ldi r24, 0x30 ; 48
1d2: dd df rcall .-70 ; 0x18e
delay(10);
1d4: 8a e0 ldi r24, 0x0A ; 10
1d6: 90 e0 ldi r25, 0x00 ; 0
1d8: d5 df rcall .-86 ; 0x184
write_command(0x0C); //显示状态 ON,游标OFF,反白OFF
1da: 8c e0 ldi r24, 0x0C ; 12
1dc: d8 df rcall .-80 ; 0x18e
delay(10);
1de: 8a e0 ldi r24, 0x0A ; 10
1e0: 90 e0 ldi r25, 0x00 ; 0
1e2: d0 df rcall .-96 ; 0x184
write_command(0x01); //清除显示
1e4: 81 e0 ldi r24, 0x01 ; 1
1e6: d3 df rcall .-90 ; 0x18e
delay(500);
1e8: 84 ef ldi r24, 0xF4 ; 244
1ea: 91 e0 ldi r25, 0x01 ; 1
1ec: cb df rcall .-106 ; 0x184
write_command(0x02); //地址归位
1ee: 82 e0 ldi r24, 0x02 ; 2
1f0: ce df rcall .-100 ; 0x18e
write_command(0x80); //设置DDRAM地址
1f2: 80 e8 ldi r24, 0x80 ; 128
1f4: cc df rcall .-104 ; 0x18e
1f6: 08 95 ret
000001f8 <display_str>:
}
/************************字符串打印函数***************************/
void display_str(unsigned char row,unsigned char column,unsigned char *p)
{
1f8: 0f 93 push r16
1fa: 1f 93 push r17
1fc: cf 93 push r28
1fe: df 93 push r29
200: 18 2f mov r17, r24
202: 06 2f mov r16, r22
204: ea 01 movw r28, r20
write_command(0x30);
206: 80 e3 ldi r24, 0x30 ; 48
208: c2 df rcall .-124 ; 0x18e
//write_command(adress_table[row*8+column]);
write_command(pgm_read_byte(adress_table+row*8+column));
20a: e1 2f mov r30, r17
20c: ff 27 eor r31, r31
20e: 83 e0 ldi r24, 0x03 ; 3
210: ee 0f add r30, r30
212: ff 1f adc r31, r31
214: 8a 95 dec r24
216: e1 f7 brne .-8 ; 0x210
218: e0 0f add r30, r16
21a: f1 1d adc r31, r1
21c: ea 5d subi r30, 0xDA ; 218
21e: ff 4f sbci r31, 0xFF ; 255
220: 84 91 lpm r24, Z
222: b5 df rcall .-150 ; 0x18e
while((*p)!='\0')
{write_data(*p++);
column++;
224: 88 81 ld r24, Y
226: 88 23 and r24, r24
228: 29 f0 breq .+10 ; 0x234
22a: 89 91 ld r24, Y+
22c: bf df rcall .-130 ; 0x1ac
22e: 88 81 ld r24, Y
230: 88 23 and r24, r24
232: d9 f7 brne .-10 ; 0x22a
234: df 91 pop r29
236: cf 91 pop r28
238: 1f 91 pop r17
23a: 0f 91 pop r16
23c: 08 95 ret
0000023e <display_1str>:
}
}
void display_1str(unsigned char row,unsigned char column,unsigned char x)
{
23e: ff 92 push r15
240: 0f 93 push r16
242: 1f 93 push r17
244: 18 2f mov r17, r24
246: 06 2f mov r16, r22
248: f4 2e mov r15, r20
write_command(0x30);
24a: 80 e3 ldi r24, 0x30 ; 48
24c: a0 df rcall .-192 ; 0x18e
write_command(pgm_read_byte(adress_table+row*8+column));
24e: e1 2f mov r30, r17
250: ff 27 eor r31, r31
252: 93 e0 ldi r25, 0x03 ; 3
254: ee 0f add r30, r30
256: ff 1f adc r31, r31
258: 9a 95 dec r25
25a: e1 f7 brne .-8 ; 0x254
25c: e0 0f add r30, r16
25e: f1 1d adc r31, r1
260: ea 5d subi r30, 0xDA ; 218
262: ff 4f sbci r31, 0xFF ; 255
264: 84 91 lpm r24, Z
266: 93 df rcall .-218 ; 0x18e
write_data((x/10)+48);
268: 1a e0 ldi r17, 0x0A ; 10
26a: 8f 2d mov r24, r15
26c: 61 2f mov r22, r17
26e: cf d2 rcall .+1438 ; 0x80e
270: 80 5d subi r24, 0xD0 ; 208
272: 9c df rcall .-200 ; 0x1ac
write_data((x%10)+48);
274: 8f 2d mov r24, r15
276: 61 2f mov r22, r17
278: ca d2 rcall .+1428 ; 0x80e
27a: 89 2f mov r24, r25
27c: 80 5d subi r24, 0xD0 ; 208
27e: 96 df rcall .-212 ; 0x1ac
write_data('%');
280: 85 e2 ldi r24, 0x25 ; 37
282: 94 df rcall .-216 ; 0x1ac
284: 1f 91 pop r17
286: 0f 91 pop r16
288: ff 90 pop r15
28a: 08 95 ret
0000028c <display_str2>:
}
void display_str2(unsigned char row,unsigned char column,char *p)
{
28c: ff 92 push r15
28e: 0f 93 push r16
290: 1f 93 push r17
292: cf 93 push r28
294: df 93 push r29
296: 18 2f mov r17, r24
298: 06 2f mov r16, r22
29a: ea 01 movw r28, r20
unsigned char j,i=0;
29c: ff 24 eor r15, r15
j=1;
write_command(0x30);
29e: 80 e3 ldi r24, 0x30 ; 48
2a0: 76 df rcall .-276 ; 0x18e
//write_command(adress_table[row*8+column]);
write_command(pgm_read_byte(adress_table+row*8+column));
2a2: e1 2f mov r30, r17
2a4: ff 27 eor r31, r31
2a6: 23 e0 ldi r18, 0x03 ; 3
2a8: ee 0f add r30, r30
2aa: ff 1f adc r31, r31
2ac: 2a 95 dec r18
2ae: e1 f7 brne .-8 ; 0x2a8
2b0: e0 0f add r30, r16
2b2: f1 1d adc r31, r1
2b4: ea 5d subi r30, 0xDA ; 218
2b6: ff 4f sbci r31, 0xFF ; 255
2b8: 84 91 lpm r24, Z
2ba: 69 df rcall .-302 ; 0x18e
while((j)!='\0')
{j=pgm_read_byte(p+i);
2bc: fe 01 movw r30, r28
2be: ef 0d add r30, r15
2c0: f1 1d adc r31, r1
2c2: 14 91 lpm r17, Z
write_data(j);
2c4: 81 2f mov r24, r17
2c6: 72 df rcall .-284 ; 0x1ac
i++;
2c8: f3 94 inc r15
2ca: 11 23 and r17, r17
2cc: b9 f7 brne .-18 ; 0x2bc
2ce: df 91 pop r29
2d0: cf 91 pop r28
2d2: 1f 91 pop r17
2d4: 0f 91 pop r16
2d6: ff 90 pop r15
2d8: 08 95 ret
000002da <settxt>:
}
}
/*void setpic(void)
{
unsigned char i,j;
LCD_Init();
write_command(0x34);
write_command(0x3c);// RE=1 扩展指令选择 G=1 开图形显示
for(j=0;j<16;j++)
for(i=0;i<32;i++)
{
write_command(0x80+i);
write_command(0x80+j);
write_data(0x00);
write_data(0x00);
}
write_command(0x3e);
}*/
/************************开文本函数***************************/
void settxt(void)
{
write_command(0x30); //功能设置 8位数据,基本指令集
2da: 80 e3 ldi r24, 0x30 ; 48
2dc: 58 df rcall .-336 ; 0x18e
2de: 08 95 ret
000002e0 <OSTaskCreate>:
创建时间: 2007年3月3日
修改时间:
************************************************************************************************************************/
void OSTaskCreate(void (*Task)(void),Uint_8bit *Stack,Uint_8bit TaskID)
{
2e0: db 01 movw r26, r22
Uint_8bit i;
*Stack--=(Uint_16bit)Task; /*将任务的地址低位压入堆栈 */
2e2: 8c 93 st X, r24
*Stack--=(Uint_16bit)Task>>8; /*将任务的地址高位压入堆栈 */
2e4: 89 2f mov r24, r25
2e6: 99 27 eor r25, r25
2e8: 8e 93 st -X, r24
*Stack--=0x00; /*R1 __zero_reg__ */
2ea: 1e 92 st -X, r1
*Stack--=0x00; /*R0 __tmp_reg__ */
2ec: 1e 92 st -X, r1
*Stack--=0x80; /*SREG 在任务中,开启全局中断 */
2ee: 80 e8 ldi r24, 0x80 ; 128
2f0: 8e 93 st -X, r24
2f2: 11 97 sbiw r26, 0x01 ; 1
for(i=0;i<14;i++)
2f4: 80 e0 ldi r24, 0x00 ; 0
*Stack--=i;
2f6: 8c 93 st X, r24
2f8: 11 97 sbiw r26, 0x01 ; 1
2fa: 8f 5f subi r24, 0xFF ; 255
2fc: 8e 30 cpi r24, 0x0E ; 14
2fe: d8 f3 brcs .-10 ; 0x2f6
/*
在 avr-libc 中的 FAQ中的 What registers are used by the C compiler?
描述了寄存器的作用
*/
TCB[TaskID].OSTaskStackTop = (Uint_16bit)Stack;
300: 84 2f mov r24, r20
302: 99 27 eor r25, r25
304: fc 01 movw r30, r24
306: ee 0f add r30, r30
308: ff 1f adc r31, r31
30a: ee 0f add r30, r30
30c: ff 1f adc r31, r31
30e: e8 0f add r30, r24
310: f9 1f adc r31, r25
312: eb 59 subi r30, 0x9B ; 155
314: ff 4f sbci r31, 0xFF ; 255
316: a0 83 st Z, r26
318: b1 83 std Z+1, r27 ; 0x01
/*
将人工堆栈的栈顶,保存到堆栈的数组中
*/
OSRdyTbl |= 0x01<<TaskID; /*任务就绪表已经准备好 */
31a: 21 e0 ldi r18, 0x01 ; 1
31c: 30 e0 ldi r19, 0x00 ; 0
31e: 02 c0 rjmp .+4 ; 0x324
320: 22 0f add r18, r18
322: 33 1f adc r19, r19
324: 8a 95 dec r24
326: e2 f7 brpl .-8 ; 0x320
328: 22 2a or r2, r18
32a: 08 95 ret
0000032c <OSStartTask>:
}
/************************************************************************************************************************
函数名称: OSStartTask
函数原型: void OSStartTask(void)
函数功能: 开始任务调度,从空闲任务开始运行
入口参数: 无
出口参数: 无
有关说明: 执行"reti"指令之后打开全局中断
创建时间: 2007年3月3日
修改时间:
************************************************************************************************************************/
void OSStartTask(void)
{
OSPrioCur = OS_TASKS;
32c: 44 e0 ldi r20, 0x04 ; 4
32e: 34 2e mov r3, r20
OSPrioHighRdy = OS_TASKS;
330: 53 2c mov r5, r3
SP=TCB[OS_TASKS].OSTaskStackTop+17;
332: 80 91 79 00 lds r24, 0x0079
336: 90 91 7a 00 lds r25, 0x007A
33a: 41 96 adiw r24, 0x11 ; 17
33c: 9e bf out 0x3e, r25 ; 62
33e: 8d bf out 0x3d, r24 ; 61
__asm__ __volatile__( "reti" "\n\t" );
340: 18 95 reti
342: 08 95 ret
00000344 <OS_TASK_SW>:
}
/************************************************************************************************************************
函数名称: OS_TASK_SW
函数原型: void OS_TASK_SW(void)
函数功能: 进行任务调度
入口参数: 无
出口参数: 无
有关说明: 中断和任务都可以调用这个任务调度函数
创建时间: 2007年3月3日
修改时间:
************************************************************************************************************************/
void OS_TASK_SW(void)
{
__asm__ __volatile__("LDI R16,0x01 \n\t");
344: 01 e0 ldi r16, 0x01 ; 1
/*
清除中断要求任务切换的标志位,设置正在任务切换标志位
*/
__asm__ __volatile__("SEI \n\t");
346: 78 94 sei
/*
开中断,因为如果因中断在任务调度中进行,要重新进行调度时,已经关中断
*/
/* 根据中断时保存寄存器的次序入栈,模拟一次中断后,入栈的情况*/
__asm__ __volatile__("PUSH __zero_reg__ \n\t"); /*R1 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -