⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 t6963.lst

📁 LCD菜单的仿真及程序AVR_T6963.rar
💻 LST
📖 第 1 页 / 共 4 页
字号:
__start:
__text_start:
    038E E5CF      LDI	R28,0x5F
    038F E0D4      LDI	R29,4
    0390 BFCD      OUT	0x3D,R28
    0391 BFDE      OUT	0x3E,R29
    0392 51C0      SUBI	R28,0x10
    0393 40D0      SBCI	R29,0
    0394 EA0A      LDI	R16,0xAA
    0395 8308      STD	Y+0,R16
    0396 2400      CLR	R0
    0397 E8EF      LDI	R30,0x8F
    0398 E0F0      LDI	R31,0
    0399 E010      LDI	R17,0
    039A 39E1      CPI	R30,0x91
    039B 07F1      CPC	R31,R17
    039C F011      BEQ	0x039F
    039D 9201      ST	R0,Z+
    039E CFFB      RJMP	0x039A
    039F 8300      STD	Z+0,R16
    03A0 EEEC      LDI	R30,0xEC
    03A1 E0F6      LDI	R31,6
    03A2 E6A0      LDI	R26,0x60
    03A3 E0B0      LDI	R27,0
    03A4 E017      LDI	R17,7
    03A5 31EB      CPI	R30,0x1B
    03A6 07F1      CPC	R31,R17
    03A7 F021      BEQ	0x03AC
    03A8 95C8      LPM
    03A9 9631      ADIW	R30,1
    03AA 920D      ST	R0,X+
    03AB CFF9      RJMP	0x03A5
    03AC D31A      RCALL	_main
_exit:
    03AD CFFF      RJMP	_exit
FILE: D:\NEW\AVR_T6963\t6963.c
(0001) #define T6963_C
(0002) #include "includes.h"
(0003) 
(0004) 
(0005) /************************************************/
(0006) /* 取当前行数据*/
(0007) /************************************************/
(0008) unsigned char fnGetRow(void)
(0009) {
(0010)     return(gCurRow);
_fnGetRow:
    03AE 91000090  LDS	R16,_gCurRow
    03B0 9508      RET
(0011) }
(0012) /************************************************/
(0013) /* 取当前列数据*/
(0014) /************************************************/
(0015) unsigned char fnGetCol(void)
(0016) {
(0017)     return(gCurCol);
_fnGetCol:
    03B1 9100008F  LDS	R16,_gCurCol
    03B3 9508      RET
(0018) }
(0019) /************************************************/
(0020) /* 读状态*/
(0021) /************************************************/
(0022) unsigned char RD_LCM(void)
(0023) {
(0024)     unsigned char temp;
(0025)     dir_datap=0x00;
_RD_LCM:
  temp                 --> R16
    03B4 2422      CLR	R2
    03B5 BA27      OUT	0x17,R2
(0026)     port_conp  |= (1 <<LCM ); //LCM=LCMCW;
    03B6 9ADA      SBI	0x1B,2
(0027)     port_conp &= ~(1 << RD);  //RD=0;
    03B7 98D9      CBI	0x1B,1
(0028)     NOP();
    03B8 0000      NOP
(0029)     temp=LCD_IN;
    03B9 B306      IN	R16,0x16
(0030)     port_conp |= (1<<RD);     //RD=1;
    03BA 9AD9      SBI	0x1B,1
(0031)     dir_datap = 0xff;
    03BB EF8F      LDI	R24,0xFF
    03BC BB87      OUT	0x17,R24
(0032)     return(temp);
    03BD 9508      RET
(0033) }
(0034) /************************************************/
(0035) /* 读数据*/
(0036) /************************************************/
(0037) unsigned char RD_DAT(void)
(0038) {
(0039)     unsigned char temp;
(0040)     dir_datap = 0x00;
_RD_DAT:
  temp                 --> R16
    03BE 2422      CLR	R2
    03BF BA27      OUT	0x17,R2
(0041)     port_conp &= ~(1<<LCM);     //LCM=LCMDW;
    03C0 98DA      CBI	0x1B,2
(0042)     port_conp &= ~(1 << RD);    //RD=0;
    03C1 98D9      CBI	0x1B,1
(0043)     NOP();
    03C2 0000      NOP
(0044)     temp = LCD_IN;
    03C3 B306      IN	R16,0x16
(0045)     port_conp |= (1<<RD);       //RD=1;
    03C4 9AD9      SBI	0x1B,1
(0046)     dir_datap = 0xff;
    03C5 EF8F      LDI	R24,0xFF
    03C6 BB87      OUT	0x17,R24
(0047)     return(temp);
    03C7 9508      RET
(0048) }
(0049) /************************************************/
(0050) /* 写数据*/
(0051) /************************************************/
(0052) void WR_DAT(unsigned char val)
(0053) {
(0054)     dir_datap = 0xff;
_WR_DAT:
  val                  --> R16
    03C8 EF8F      LDI	R24,0xFF
    03C9 BB87      OUT	0x17,R24
(0055)     port_conp &= ~(1<<LCM);     //LCM=LCMDW;
    03CA 98DA      CBI	0x1B,2
(0056)     LCD_OUT = val;
    03CB BB08      OUT	0x18,R16
(0057)     port_conp &= ~(1<<WR);      //WR=0;
    03CC 98D8      CBI	0x1B,0
(0058)     NOP();
    03CD 0000      NOP
(0059)     NOP();
    03CE 0000      NOP
(0060)     port_conp |= (1<<WR);       //WR=1;
    03CF 9AD8      SBI	0x1B,0
(0061) }
    03D0 9508      RET
(0062) /************************************************/
(0063) /* 写命令*/
(0064) /************************************************/
(0065) void WR_CMD(unsigned char val)
(0066) {
(0067)     dir_datap = 0xff;
_WR_CMD:
  val                  --> R16
    03D1 EF8F      LDI	R24,0xFF
    03D2 BB87      OUT	0x17,R24
(0068)     port_conp  |= (1 << LCM);    //LCM=LCMCW;
    03D3 9ADA      SBI	0x1B,2
(0069)     LCD_OUT = val;
    03D4 BB08      OUT	0x18,R16
(0070)     port_conp &= ~(1<<WR);       //WR=0;
    03D5 98D8      CBI	0x1B,0
(0071)     NOP();
    03D6 0000      NOP
(0072)     NOP();
    03D7 0000      NOP
(0073)     port_conp |= (1<<WR);        //WR=1;
    03D8 9AD8      SBI	0x1B,0
(0074) }
    03D9 9508      RET
_fnSTA01:
  i                    --> R20
    03DA D393      RCALL	push_gset1
(0075) /************************************************/
(0076) /* 状态位STA1,STA0判断读写指令和读写数据*/
(0077) /* 在读写数据或者写入命令前必须保证均为1 */
(0078) /************************************************/
(0079) unsigned char fnSTA01(void)
(0080) {
(0081)     unsigned char i;
(0082)     for(i=10;i>0;i--)
    03DB E04A      LDI	R20,0xA
    03DC C007      RJMP	0x03E4
(0083)     {
(0084)         if((RD_LCM() & 0x03) == 0x03) // 读取状态
    03DD DFD6      RCALL	_RD_LCM
    03DE 2F80      MOV	R24,R16
    03DF 7083      ANDI	R24,3
    03E0 3083      CPI	R24,3
    03E1 F409      BNE	0x03E3
(0085)         {
(0086)             break;
    03E2 C004      RJMP	0x03E7
    03E3 954A      DEC	R20
    03E4 2422      CLR	R2
    03E5 1624      CP	R2,R20
    03E6 F3B0      BCS	0x03DD
(0087)         }
(0088)     }
(0089)     return(i); // 若返回零说明错误
    03E7 2F04      MOV	R16,R20
    03E8 D388      RCALL	pop_gset1
    03E9 9508      RET
_fnSTA2:
  i                    --> R20
    03EA D383      RCALL	push_gset1
(0090) }
(0091) /********************************************/
(0092) /* 检查STA2,如果STA2=1 为自动读状态*/
(0093) /********************************************/
(0094) unsigned char fnSTA2(void)
(0095) {
(0096)     unsigned char i;
(0097)     for(i=10;i>0;i--)
    03EB E04A      LDI	R20,0xA
    03EC C007      RJMP	0x03F4
(0098)     {
(0099)         if((RD_LCM() & 0x04) == 0x04)
    03ED DFC6      RCALL	_RD_LCM
    03EE 2F80      MOV	R24,R16
    03EF 7084      ANDI	R24,4
    03F0 3084      CPI	R24,4
    03F1 F409      BNE	0x03F3
(0100)         {
(0101)             break;
    03F2 C004      RJMP	0x03F7
    03F3 954A      DEC	R20
    03F4 2422      CLR	R2
    03F5 1624      CP	R2,R20
    03F6 F3B0      BCS	0x03ED
(0102)         }
(0103)     }
(0104)     return(i); // 若返回零说明错误
    03F7 2F04      MOV	R16,R20
    03F8 D378      RCALL	pop_gset1
    03F9 9508      RET
_fnSTA3:
  i                    --> R20
    03FA D373      RCALL	push_gset1
(0105) }
(0106) /***********************************************/
(0107) /* 状态位STA3 判断STA3 = 1 数据自动写状态*/
(0108) /***********************************************/
(0109) unsigned char fnSTA3(void)
(0110) {
(0111)     unsigned char i;
(0112)     for(i=10;i>0;i--)
    03FB E04A      LDI	R20,0xA
    03FC C007      RJMP	0x0404
(0113)     {
(0114)         if((RD_LCM() & 0x08) == 0x08)
    03FD DFB6      RCALL	_RD_LCM
    03FE 2F80      MOV	R24,R16
    03FF 7088      ANDI	R24,0x8
    0400 3088      CPI	R24,0x8
    0401 F409      BNE	0x0403
(0115)         {
(0116)             break;
    0402 C004      RJMP	0x0407
    0403 954A      DEC	R20
    0404 2422      CLR	R2
    0405 1624      CP	R2,R20
    0406 F3B0      BCS	0x03FD
(0117)         }
(0118)     }
(0119)     return(i); // 若返回零说明错误
    0407 2F04      MOV	R16,R20
    0408 D368      RCALL	pop_gset1
    0409 9508      RET
_fnSTA6:
  i                    --> R20
    040A D363      RCALL	push_gset1
(0120) }
(0121) /************************************************/
(0122) /* 状态位STA6 判断STA6 =1 屏读/屏拷贝状态*/
(0123) /************************************************/
(0124) unsigned char fnSTA6(void)
(0125) {
(0126)     unsigned char i;
(0127)     for(i=10;i>0;i--)
    040B E04A      LDI	R20,0xA
    040C C007      RJMP	0x0414
(0128)     {
(0129)         if((RD_LCM() & 0x40) == 0x40)
    040D DFA6      RCALL	_RD_LCM
    040E 2F80      MOV	R24,R16
    040F 7480      ANDI	R24,0x40
    0410 3480      CPI	R24,0x40
    0411 F409      BNE	0x0413
(0130)         {
(0131)             break;
    0412 C004      RJMP	0x0417
    0413 954A      DEC	R20
    0414 2422      CLR	R2
    0415 1624      CP	R2,R20
    0416 F3B0      BCS	0x040D
(0132)         }
(0133)     }
(0134)     return(i); // 若返回零说明错误
    0417 2F04      MOV	R16,R20
    0418 D358      RCALL	pop_gset1
    0419 9508      RET
_fnPR1:
  uPar2                --> Y+4
  uPar1                --> R22
  uCmd                 --> R20
    041A D36A      RCALL	push_gset2
    041B 2F62      MOV	R22,R18
    041C 2F40      MOV	R20,R16
(0135) }
(0136) /************************/
(0137) /* 写双参数的指令*/
(0138) /************************/
(0139) unsigned char fnPR1(unsigned char uCmd,unsigned char uPar1,unsigned char uPar2)
(0140) {
(0141)     if(fnSTA01() == 0)
    041D DFBC      RCALL	_fnSTA01
    041E 2300      TST	R16
    041F F411      BNE	0x0422
(0142)     {
(0143)         return 1;
    0420 E001      LDI	R16,1
    0421 C011      RJMP	0x0433
(0144)     }
(0145)     WR_DAT(uPar1);
    0422 2F06      MOV	R16,R22
    0423 DFA4      RCALL	_WR_DAT
(0146)     if(fnSTA01() == 0)
    0424 DFB5      RCALL	_fnSTA01
    0425 2300      TST	R16
    0426 F411      BNE	0x0429
(0147)     {
(0148)         return 2;
    0427 E002      LDI	R16,2
    0428 C00A      RJMP	0x0433
(0149)     }
(0150)     WR_DAT(uPar2);
    0429 810C      LDD	R16,Y+4
    042A DF9D      RCALL	_WR_DAT
(0151)     if(fnSTA01() == 0)
    042B DFAE      RCALL	_fnSTA01
    042C 2300      TST	R16
    042D F411      BNE	0x0430
(0152)     {
(0153)         return 3;
    042E E003      LDI	R16,3
    042F C003      RJMP	0x0433
(0154)     }
(0155)     WR_CMD(uCmd);
    0430 2F04      MOV	R16,R20
    0431 DF9F      RCALL	_WR_CMD
(0156)     return(0); // 返回0 成功
    0432 2700      CLR	R16
    0433 D334      RCALL	pop_gset2
    0434 9508      RET
_fnPR11:
  uPar1                --> R22
  uCmd                 --> R20
    0435 D34F      RCALL	push_gset2
    0436 2F62      MOV	R22,R18
    0437 2F40      MOV	R20,R16
(0157) }
(0158) /************************/
(0159) /* 写单参数的指令*/
(0160) /************************/
(0161) unsigned char fnPR11(unsigned char uCmd,unsigned char uPar1)
(0162) {
(0163)     if(fnSTA01() == 0)
    0438 DFA1      RCALL	_fnSTA01
    0439 2300      TST	R16
    043A F411      BNE	0x043D
(0164)     {
(0165)         return 1;
    043B E001      LDI	R16,1
    043C C00A      RJMP	0x0447
(0166)     }
(0167)     WR_DAT(uPar1);
    043D 2F06      MOV	R16,R22
    043E DF89      RCALL	_WR_DAT
(0168)     if(fnSTA01() == 0)
    043F DF9A      RCALL	_fnSTA01
    0440 2300      TST	R16
    0441 F411      BNE	0x0444
(0169)     {
(0170)         return 2;
    0442 E002      LDI	R16,2
    0443 C003      RJMP	0x0447
(0171)     }
(0172)     WR_CMD(uCmd);
    0444 2F04      MOV	R16,R20
    0445 DF8B      RCALL	_WR_CMD
(0173)     return(0); // 返回0 成功 
    0446 2700      CLR	R16
    0447 D320      RCALL	pop_gset2
    0448 9508      RET
_fnPR12:
  uCmd                 --> R20
    0449 D324      RCALL	push_gset1
    044A 2F40      MOV	R20,R16
(0174) }
(0175) /************************/
(0176) /* 写无参数的指令*/
(0177) /************************/
(0178) unsigned char fnPR12(unsigned char uCmd)
(0179) {   
(0180)     if(fnSTA01() == 0)
    044B DF8E      RCALL	_fnSTA01
    044C 2300      TST	R16
    044D F411      BNE	0x0450
(0181)     {
(0182)         return 1;
    044E E001      LDI	R16,1
    044F C003      RJMP	0x0453
(0183)     }
(0184)     WR_CMD(uCmd);
    0450 2F04      MOV	R16,R20
    0451 DF7F      RCALL	_WR_CMD
(0185)     return(0); // 返回0 成功
    0452 2700      CLR	R16
    0453 D31D      RCALL	pop_gset1
    0454 9508      RET
_fnPR13:
  uData                --> R20
    0455 D318      RCALL	push_gset1
    0456 2F40      MOV	R20,R16
(0186) }
(0187) /************************/
(0188) /* 写数据*/
(0189) /************************/
(0190) unsigned char fnPR13(unsigned char uData)
(0191) {
(0192)     if(fnSTA3() == 0)
    0457 DFA2      RCALL	_fnSTA3
    0458 2300      TST	R16
    0459 F411      BNE	0x045C
(0193)     {
(0194)         return 1;
    045A E001      LDI	R16,1
    045B C003      RJMP	0x045F
(0195)     }
(0196)     WR_DAT(uData);
    045C 2F04      MOV	R16,R20
    045D DF6A      RCALL	_WR_DAT
(0197)     return(0); // 返回0 成功

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -