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

📄 irr.lst

📁 16个单片机c语言实验程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
__start:
__text_start:
      2F E5CF      LDI	R28,0x5F
      30 E0D4      LDI	R29,4
      31 BFCD      OUT	0x3D,R28
      32 BFDE      OUT	0x3E,R29
      33 51CE      SUBI	R28,0x1E
      34 40D0      SBCI	R29,0
      35 EA0A      LDI	R16,0xAA
      36 8308      STD	Y+0,R16
      37 2400      CLR	R0
      38 E6E9      LDI	R30,0x69
      39 E0F0      LDI	R31,0
      3A E010      LDI	R17,0
      3B 37E2      CPI	R30,0x72
      3C 07F1      CPC	R31,R17
      3D F011      BEQ	0x0040
      3E 9201      ST	R0,Z+
      3F CFFB      RJMP	0x003B
      40 8300      STD	Z+0,R16
      41 E5E4      LDI	R30,0x54
      42 E0F0      LDI	R31,0
      43 E6A0      LDI	R26,0x60
      44 E0B0      LDI	R27,0
      45 E010      LDI	R17,0
      46 E000      LDI	R16,0
      47 BF0B      OUT	0x3B,R16
      48 35ED      CPI	R30,0x5D
      49 07F1      CPC	R31,R17
      4A F021      BEQ	0x004F
      4B 95C8      LPM
      4C 9631      ADIW	R30,1
      4D 920D      ST	R0,X+
      4E CFF9      RJMP	0x0048
      4F 940E 0276 CALL	_main
_exit:
      51 CFFF      RJMP	_exit
FILE: C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\1602.h
(0001) #define uchar unsigned char 
(0002) #define uint unsigned int 
(0003) 
(0004) #define RS 5
(0005) #define RW 6
(0006) #define EN 7
(0007) 
(0008) void s_ms(uint ms)
(0009) {
(0010) 	for(;ms>1;ms--);
_s_ms:
  ms                   --> R16
      52 C002      RJMP	0x0055
      53 5001      SUBI	R16,1
      54 4010      SBCI	R17,0
      55 E081      LDI	R24,1
      56 E090      LDI	R25,0
      57 1780      CP	R24,R16
      58 0791      CPC	R25,R17
      59 F3C8      BCS	0x0053
      5A 9508      RET
_busy:
  temp                 --> R20
      5B 934A      ST	R20,-Y
(0011) }	
(0012) 
(0013) //查忙
(0014) void busy(void)
(0015) {
(0016)     uchar temp;
(0017) 	s_ms(500);
      5C EF04      LDI	R16,0xF4
      5D E011      LDI	R17,1
      5E DFF3      RCALL	_s_ms
(0018) 	PORTA&=~(1<<RS);    //RS=0
      5F 98DD      CBI	0x1B,5
(0019) 	s_ms(500);
      60 EF04      LDI	R16,0xF4
      61 E011      LDI	R17,1
      62 DFEF      RCALL	_s_ms
(0020) 	PORTA|=(1<<RW);     //RW=1
      63 9ADE      SBI	0x1B,6
(0021) 	s_ms(500);
      64 EF04      LDI	R16,0xF4
      65 E011      LDI	R17,1
      66 DFEB      RCALL	_s_ms
      67 C01A      RJMP	0x0082
(0022) 	while(temp)
(0023) 	{
(0024) 		PORTA|=(1<<EN); //EN=1
      68 9ADF      SBI	0x1B,7
(0025) 		s_ms(500);
      69 EF04      LDI	R16,0xF4
      6A E011      LDI	R17,1
      6B DFE6      RCALL	_s_ms
(0026) 		DDRD=0x00;      //A口变输入
      6C 2422      CLR	R2
      6D BA21      OUT	0x11,R2
(0027) 		PORTD=0xff;     //上拉使能
      6E EF8F      LDI	R24,0xFF
      6F BB82      OUT	0x12,R24
(0028) 		s_ms(500);
      70 EF04      LDI	R16,0xF4
      71 E011      LDI	R17,1
      72 DFDF      RCALL	_s_ms
(0029) 		temp = PIND&0x80;    //读取A口
      73 B340      IN	R20,0x10
      74 7840      ANDI	R20,0x80
(0030) 		s_ms(500);      
      75 EF04      LDI	R16,0xF4
      76 E011      LDI	R17,1
      77 DFDA      RCALL	_s_ms
(0031) 		DDRD=0xff;      
      78 EF8F      LDI	R24,0xFF
      79 BB81      OUT	0x11,R24
(0032) 		PORTD=0xff;        //A口变输出
      7A BB82      OUT	0x12,R24
(0033) 		s_ms(500);
      7B EF04      LDI	R16,0xF4
      7C E011      LDI	R17,1
      7D DFD4      RCALL	_s_ms
(0034) 		PORTA&=~(1<<EN);   //EN=0
      7E 98DF      CBI	0x1B,7
(0035) 		s_ms(500);
      7F EF04      LDI	R16,0xF4
      80 E011      LDI	R17,1
      81 DFD0      RCALL	_s_ms
      82 2344      TST	R20
      83 F721      BNE	0x0068
      84 9149      LD	R20,Y+
      85 9508      RET
_writecom:
  com                  --> R10
      86 92AA      ST	R10,-Y
      87 2EA0      MOV	R10,R16
(0036) 	}
(0037) }
(0038) 
(0039) //写指令
(0040) void writecom(uchar	com)
(0041) {
(0042) 	busy();
      88 DFD2      RCALL	_busy
(0043) 	s_ms(500);
      89 EF04      LDI	R16,0xF4
      8A E011      LDI	R17,1
      8B DFC6      RCALL	_s_ms
(0044) 	PORTA&=~(1<<RS);   //RS=0
      8C 98DD      CBI	0x1B,5
(0045) 	s_ms(500);
      8D EF04      LDI	R16,0xF4
      8E E011      LDI	R17,1
      8F DFC2      RCALL	_s_ms
(0046) 	PORTA&=~(1<<RW);   //RW=0
      90 98DE      CBI	0x1B,6
(0047) 	s_ms(500);
      91 EF04      LDI	R16,0xF4
      92 E011      LDI	R17,1
      93 DFBE      RCALL	_s_ms
(0048) 	PORTA|=(1<<EN);    //EN=1
      94 9ADF      SBI	0x1B,7
(0049) 	s_ms(500);
      95 EF04      LDI	R16,0xF4
      96 E011      LDI	R17,1
      97 DFBA      RCALL	_s_ms
(0050) 	PORTD = com;       //输出指令
      98 BAA2      OUT	0x12,R10
(0051) 	s_ms(500);
      99 EF04      LDI	R16,0xF4
      9A E011      LDI	R17,1
      9B DFB6      RCALL	_s_ms
(0052) 	PORTA&=~(1<<EN);   //EN=0
      9C 98DF      CBI	0x1B,7
(0053) 	s_ms(500);
      9D EF04      LDI	R16,0xF4
      9E E011      LDI	R17,1
      9F DFB2      RCALL	_s_ms
      A0 90A9      LD	R10,Y+
      A1 9508      RET
(0054) }
(0055) 
(0056) //1602初始化
(0057) void	LcdInit(void)
(0058) {
(0059)     DDRD = 0xff; 
_LcdInit:
      A2 EF8F      LDI	R24,0xFF
      A3 BB81      OUT	0x11,R24
(0060)     PORTD = 0x00; 
      A4 2422      CLR	R2
      A5 BA22      OUT	0x12,R2
(0061) 	writecom(0x38);
      A6 E308      LDI	R16,0x38
      A7 DFDE      RCALL	_writecom
(0062) 	s_ms(1000);
      A8 EE08      LDI	R16,0xE8
      A9 E013      LDI	R17,3
      AA DFA7      RCALL	_s_ms
(0063) 	writecom(0x01);
      AB E001      LDI	R16,1
      AC DFD9      RCALL	_writecom
(0064) 	s_ms(1000);
      AD EE08      LDI	R16,0xE8
      AE E013      LDI	R17,3
      AF DFA2      RCALL	_s_ms
(0065) 	//s_ms(1000);
(0066) 	writecom(0x02);
      B0 E002      LDI	R16,2
      B1 DFD4      RCALL	_writecom
(0067) 	s_ms(200);
      B2 EC08      LDI	R16,0xC8
      B3 E010      LDI	R17,0
      B4 DF9D      RCALL	_s_ms
(0068) 	writecom(0x06);
      B5 E006      LDI	R16,6
      B6 DFCF      RCALL	_writecom
(0069) 	s_ms(200);
      B7 EC08      LDI	R16,0xC8
      B8 E010      LDI	R17,0
      B9 DF98      RCALL	_s_ms
(0070) 	writecom(0x0c);
      BA E00C      LDI	R16,0xC
      BB DFCA      RCALL	_writecom
(0071) 	s_ms(200);
      BC EC08      LDI	R16,0xC8
      BD E010      LDI	R17,0
      BE DF93      RCALL	_s_ms
(0072) 	writecom(0x38);	
      BF E308      LDI	R16,0x38
      C0 DFC5      RCALL	_writecom
(0073) 	s_ms(200);
      C1 EC08      LDI	R16,0xC8
      C2 E010      LDI	R17,0
      C3 CF8E      RJMP	_s_ms
_writedata:
  data                 --> R10
      C4 92AA      ST	R10,-Y
      C5 2EA0      MOV	R10,R16
(0074) }	
(0075) 
(0076) //写数据
(0077) void	writedata(uchar data)
(0078) {
(0079) 	busy();
      C6 DF94      RCALL	_busy
(0080) 	s_ms(200);
      C7 EC08      LDI	R16,0xC8
      C8 E010      LDI	R17,0
      C9 DF88      RCALL	_s_ms
(0081) 	PORTA|=(1<<RS);   //RS=1
      CA 9ADD      SBI	0x1B,5
(0082) 	s_ms(200);
      CB EC08      LDI	R16,0xC8
      CC E010      LDI	R17,0
      CD DF84      RCALL	_s_ms
(0083) 	PORTA&=~(1<<RW);   //RW=0
      CE 98DE      CBI	0x1B,6
(0084) 	s_ms(200);
      CF EC08      LDI	R16,0xC8
      D0 E010      LDI	R17,0
      D1 DF80      RCALL	_s_ms
(0085) 	PORTA|=(1<<EN);    //EN=1
      D2 9ADF      SBI	0x1B,7
(0086) 	s_ms(200);
      D3 EC08      LDI	R16,0xC8
      D4 E010      LDI	R17,0
      D5 DF7C      RCALL	_s_ms
(0087) 	PORTD = data;      //输出数据
      D6 BAA2      OUT	0x12,R10
(0088) 	s_ms(200);
      D7 EC08      LDI	R16,0xC8
      D8 E010      LDI	R17,0
      D9 DF78      RCALL	_s_ms
(0089) 	PORTA&=~(1<<EN);   //EN=0
      DA 98DF      CBI	0x1B,7
(0090) 	s_ms(200);
      DB EC08      LDI	R16,0xC8
      DC E010      LDI	R17,0
      DD DF74      RCALL	_s_ms
      DE 90A9      LD	R10,Y+
      DF 9508      RET
_readdata:
  temp                 --> R10
      E0 92AA      ST	R10,-Y
(0091) }
(0092) 
(0093) 
(0094) //读数据
(0095) uchar	readdata(void)
(0096) {
(0097) 	uchar temp;
(0098) 	busy();
      E1 DF79      RCALL	_busy
(0099) 	s_ms(200);
      E2 EC08      LDI	R16,0xC8
      E3 E010      LDI	R17,0
      E4 DF6D      RCALL	_s_ms
(0100) 	PORTA|=(1<<RS);  //RS=1
      E5 9ADD      SBI	0x1B,5
(0101) 	s_ms(200);
      E6 EC08      LDI	R16,0xC8
      E7 E010      LDI	R17,0
      E8 DF69      RCALL	_s_ms
(0102) 	PORTA|=(1<<RW);  //RW=1
      E9 9ADE      SBI	0x1B,6
(0103) 	s_ms(200);
      EA EC08      LDI	R16,0xC8
      EB E010      LDI	R17,0
      EC DF65      RCALL	_s_ms
(0104) 	PORTA|=(1<<EN);  //EN=1
      ED 9ADF      SBI	0x1B,7
(0105) 	s_ms(200);
      EE EC08      LDI	R16,0xC8
      EF E010      LDI	R17,0
      F0 DF61      RCALL	_s_ms
(0106) 	DDRD=0x00;       //A端口变输入
      F1 2422      CLR	R2
      F2 BA21      OUT	0x11,R2
(0107) 	s_ms(200);
      F3 EC08      LDI	R16,0xC8
      F4 E010      LDI	R17,0
      F5 DF5C      RCALL	_s_ms
(0108) 	temp = PIND;     //读A端口
      F6 B2A0      IN	R10,0x10
(0109) 	s_ms(200);
      F7 EC08      LDI	R16,0xC8
      F8 E010      LDI	R17,0
      F9 DF58      RCALL	_s_ms
(0110) 	DDRD=0xff;       //A端口变输出
      FA EF8F      LDI	R24,0xFF
      FB BB81      OUT	0x11,R24
(0111) 	s_ms(200);
      FC EC08      LDI	R16,0xC8
      FD E010      LDI	R17,0
      FE DF53      RCALL	_s_ms
(0112) 	PORTA&=~(1<<EN); //EN=0
      FF 98DF      CBI	0x1B,7
(0113) 	s_ms(200);
     100 EC08      LDI	R16,0xC8
     101 E010      LDI	R17,0
     102 DF4F      RCALL	_s_ms
(0114) 	return temp;	
     103 2D0A      MOV	R16,R10
     104 90A9      LD	R10,Y+
     105 9508      RET
_WriteCGRAM:
  t                    --> R10
  i                    --> R20
  pBuffer              --> R22
  num                  --> R10
     106 940E 03F4 CALL	push_xgsetF00C
     108 01B9      MOVW	R22,R18
     109 0158      MOVW	R10,R16
(0115) }
(0116) 
(0117) //=================================================
(0118) // 描述: 写LCD内部CGRAM函数
(0119) // 入口: ‘num’要写的数据个数
(0120) //        ‘pbuffer’要写的数据的首地址
(0121) // 出口: 无
(0122) //================================================
(0123) void	WriteCGRAM(uint	num, const uint	*pBuffer)
(0124) {
(0125) 	uint	i,t;
(0126) 	writecom(0x40);
     10A E400      LDI	R16,0x40
     10B DF7A      RCALL	_writecom
(0127) 	PORTA|=(1<<RS);
     10C 9ADD      SBI	0x1B,5
(0128) 	PORTA&=~(1<<RW);
     10D 98DE      CBI	0x1B,6
(0129) 	for(i=num;i!=0;i--)
     10E 01A5      MOVW	R20,R10
     10F C00A      RJMP	0x011A
(0130) 	{
(0131) 		t = *pBuffer;
     110 01FB      MOVW	R30,R22
     111 80A0      LDD	R10,Z+0
     112 80B1      LDD	R11,Z+1
(0132) 		PORTA|=(1<<EN);
     113 9ADF      SBI	0x1B,7
(0133) 		PORTD = t;
     114 BAA2      OUT	0x12,R10
(0134) 		PORTA&=~(1<<EN);				
     115 98DF      CBI	0x1B,7
(0135) 		pBuffer++;
     116 5F6E      SUBI	R22,0xFE
     117 4F7F      SBCI	R23,0xFF
     118 5041      SUBI	R20,1
     119 4050      SBCI	R21,0
     11A 3040      CPI	R20,0
     11B 0745      CPC	R20,R21
     11C F799      BNE	0x0110
     11D 940C 03FB JMP	pop_xgsetF00C
_WriteMenu:
  t                    --> R10
  i                    --> R22
  pBuffer              --> R20
     11F 940E 03F4 CALL	push_xgsetF00C
     121 01A8      MOVW	R20,R16
(0136) 	}
(0137) 	
(0138) }
(0139) 
(0140) //=================================================
(0141) //描述:写菜单函数,本程序使用的LCD规格为 16 * 2
(0142) //入口:菜单数组首地址
(0143) //出口:无
(0144) //=================================================
(0145) void	WriteMenu(const uchar *pBuffer)
(0146) {
(0147) 	uchar	i,t;
(0148) 	writecom(0x80);   //数据地址
     122 E800      LDI	R16,0x80
     123 DF62      RCALL	_writecom
(0149) 	
(0150) 	PORTA|=(1<<RS);
     124 9ADD      SBI	0x1B,5
(0151) 	PORTA&=~(1<<RW);
     125 98DE      CBI	0x1B,6
(0152) 	s_ms(50);
     126 E302      LDI	R16,0x32
     127 E010      LDI	R17,0
     128 DF29      RCALL	_s_ms
(0153) 	for(i=0;i<16;i++)
     129 2766      CLR	R22
     12A C00B      RJMP	0x0136
(0154) 	{
(0155) 		t = *pBuffer;
     12B 01FA      MOVW	R30,R20
     12C 80A0      LDD	R10,Z+0
(0156) 		PORTD = t;
     12D BAA2      OUT	0x12,R10
(0157) 		PORTA|=(1<<EN);

⌨️ 快捷键说明

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