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

📄 salve.lst

📁 用两片AVR(ATmega16)单片机
💻 LST
📖 第 1 页 / 共 2 页
字号:
     117 940E 01C8 CALL	mod16u
     119 0118      MOVW	R2,R16
     11A 0185      MOVW	R16,R10
     11B 1902      SUB	R16,R2
     11C 0913      SBC	R17,R3
     11D E02A      LDI	R18,0xA
     11E E030      LDI	R19,0
     11F 940E 01CA CALL	div16u
     121 0158      MOVW	R10,R16
(0124)                 i--; 
     122 94CA      DEC	R12
(0125)                 }while(number>=1); 
     123 01C5      MOVW	R24,R10
     124 3081      CPI	R24,1
     125 E0E0      LDI	R30,0
     126 079E      CPC	R25,R30
     127 F720      BCC	0x010C
(0126)         } 
     128 940C 01E4 JMP	pop_xgset003C
_SEG_R:
  i                    --> R12
  number               --> R10
     12A 940E 01F6 CALL	push_xgset003C
     12C 0158      MOVW	R10,R16
(0127) } 
(0128) //===================================== 
(0129) 
(0130) //=============SEG右四显示数字============== 
(0131) void SEG_R(unsigned int number) 
(0132) { 
(0133) unsigned char i=8; 
     12D E088      LDI	R24,0x8
     12E 2EC8      MOV	R12,R24
(0134) 
(0135) SEND(0x05,0x0f); //先清除右四位,右四位黑屏 
     12F E02F      LDI	R18,0xF
     130 E005      LDI	R16,5
     131 DF1C      RCALL	_SEND
(0136) SEND(0x06,0x0f);  
     132 E02F      LDI	R18,0xF
     133 E006      LDI	R16,6
     134 DF19      RCALL	_SEND
(0137) SEND(0x07,0x0f);  
     135 E02F      LDI	R18,0xF
     136 E007      LDI	R16,7
     137 DF16      RCALL	_SEND
(0138) SEND(0x08,0x0f); 
     138 E02F      LDI	R18,0xF
     139 E008      LDI	R16,0x8
     13A DF13      RCALL	_SEND
(0139) 
(0140) if(number>9999)//要显示的数值超过4位,则显示4个H 
     13B E08F      LDI	R24,0xF
     13C E297      LDI	R25,0x27
     13D 158A      CP	R24,R10
     13E 059B      CPC	R25,R11
     13F F468      BCC	0x014D
(0141)         { 
(0142)         SEND(0x05,0x0c);  
     140 E02C      LDI	R18,0xC
     141 E005      LDI	R16,5
     142 DF0B      RCALL	_SEND
(0143)         SEND(0x06,0x0c);  
     143 E02C      LDI	R18,0xC
     144 E006      LDI	R16,6
     145 DF08      RCALL	_SEND
(0144)         SEND(0x07,0x0c);  
     146 E02C      LDI	R18,0xC
     147 E007      LDI	R16,7
     148 DF05      RCALL	_SEND
(0145)         SEND(0x08,0x0c); 
     149 E02C      LDI	R18,0xC
     14A E008      LDI	R16,0x8
     14B DF02      RCALL	_SEND
(0146)         } 
     14C C01C      RJMP	0x0169
(0147) else//小于四位可以显示 
(0148)         {
(0149) /*			for(i=8;i>4;i--)
(0150) 		 {
(0151) 		  SEND(i,number%10);
(0152) 		  number=(number-number%10)/10; 
(0153) 		 }  */ 
(0154) 	
(0155)         do 
(0156)                 { 
(0157)                 SEND(i,number%10); 
     14D E02A      LDI	R18,0xA
     14E E030      LDI	R19,0
     14F 0185      MOVW	R16,R10
     150 940E 01C8 CALL	mod16u
     152 2F20      MOV	R18,R16
     153 2D0C      MOV	R16,R12
     154 DEF9      RCALL	_SEND
(0158)                 number=(number-number%10)/10; 
     155 E02A      LDI	R18,0xA
     156 E030      LDI	R19,0
     157 0185      MOVW	R16,R10
     158 940E 01C8 CALL	mod16u
     15A 0118      MOVW	R2,R16
     15B 0185      MOVW	R16,R10
     15C 1902      SUB	R16,R2
     15D 0913      SBC	R17,R3
     15E E02A      LDI	R18,0xA
     15F E030      LDI	R19,0
     160 940E 01CA CALL	div16u
     162 0158      MOVW	R10,R16
(0159) 				i--;
     163 94CA      DEC	R12
(0160)                 }while(number>=1);  
     164 01C5      MOVW	R24,R10
     165 3081      CPI	R24,1
     166 E0E0      LDI	R30,0
     167 079E      CPC	R25,R30
     168 F720      BCC	0x014D
(0161)         } 
     169 940C 01E4 JMP	pop_xgset003C
_delay:
  i                    --> R10
  j                    --> R12
  z                    --> R16
     16B 940E 01F6 CALL	push_xgset003C
FILE: D:\MYDOCU~1\MYMCUW~1\AVR\spi\salve.c
(0001) //包含所需头文件
(0002) #include <ioM16v.h>
(0003) #include <macros.h>
(0004) #include "display.c"
(0005) 
(0006) 
(0007) 
(0008) /*------宏定义------*/
(0009) #define uchar	unsigned char
(0010) #define uint	unsigned int
(0011) 
(0012) uchar k=0;
(0013) 
(0014) /*------函数定义------*/
(0015) //SPI函数
(0016) void spi_write(uchar sData);
(0017) uchar spi_read(void);
(0018) 
(0019) void delay(uint z)
(0020) {
(0021)  uint i,j;
(0022)  for(i=0;i<z;i++)
     16D 24AA      CLR	R10
     16E 24BB      CLR	R11
     16F C00E      RJMP	0x017E
(0023)   for(j=0;j<1000;j++);
     170 24CC      CLR	R12
     171 24DD      CLR	R13
     172 C003      RJMP	0x0176
     173 01C6      MOVW	R24,R12
     174 9601      ADIW	R24,1
     175 016C      MOVW	R12,R24
     176 01C6      MOVW	R24,R12
     177 3E88      CPI	R24,0xE8
     178 E0E3      LDI	R30,3
     179 079E      CPC	R25,R30
     17A F3C0      BCS	0x0173
     17B 01C5      MOVW	R24,R10
     17C 9601      ADIW	R24,1
     17D 015C      MOVW	R10,R24
     17E 16A0      CP	R10,R16
     17F 06B1      CPC	R11,R17
     180 F378      BCS	0x0170
     181 940C 01E4 JMP	pop_xgset003C
(0024) }
(0025) 
(0026) 
(0027) //端口初始化
(0028) void port_init(void)
(0029) {
(0030)  PORTA = 0x00;
_port_init:
     183 2422      CLR	R2
     184 BA2B      OUT	0x1B,R2
(0031)  DDRA  = 0x00;
     185 BA2A      OUT	0x1A,R2
(0032)  PORTB = 0x00;
     186 BA28      OUT	0x18,R2
(0033)  DDRB  = 0x00;
     187 BA27      OUT	0x17,R2
(0034)  PORTC = 0x00;
     188 BA25      OUT	0x15,R2
(0035)  DDRC  = 0x00;
     189 BA24      OUT	0x14,R2
(0036)  PORTD = 0x00;
     18A BA22      OUT	0x12,R2
(0037)  DDRD  = 0x00;
     18B BA21      OUT	0x11,R2
     18C 9508      RET
(0038) }
(0039) 
(0040) 
(0041) void spi_init(void)
(0042) {
(0043)  //spi初始化
(0044)  DDRB|=BIT(PB6);
_spi_init:
     18D 9ABE      SBI	0x17,6
(0045)  SPCR = 0x40;
     18E E480      LDI	R24,0x40
     18F B98D      OUT	0x0D,R24
(0046)  SPSR = 0x00;
     190 2422      CLR	R2
     191 B82E      OUT	0x0E,R2
     192 9508      RET
(0047) }
(0048) 
(0049) 
(0050) //功能:使用SPI发送一个字节
(0051) void spi_write(uchar sData)
(0052) {
(0053)  SPDR = sData;
_spi_write:
  sData                --> R16
     193 B90F      OUT	0x0F,R16
(0054)  while(!(SPSR & BIT(SPIF)));
     194 9B77      SBIS	0x0E,7
     195 CFFE      RJMP	0x0194
     196 9508      RET
(0055)  //sData=SPDR;//读从机发回来的数据
(0056) }
(0057) 
(0058) 
(0059) //功能:使用SPI接收一个字节
(0060) uchar spi_read(void)
(0061) {
(0062)  SPDR = 0x00;
_spi_read:
     197 2422      CLR	R2
     198 B82F      OUT	0x0F,R2
(0063)  while(!(SPSR & BIT(SPIF)));
     199 9B77      SBIS	0x0E,7
     19A CFFE      RJMP	0x0199
(0064)  k++;
     19B 9180 0060 LDS	R24,k
     19D 5F8F      SUBI	R24,0xFF
     19E 9380 0060 STS	k,R24
(0065)  return SPDR;
     1A0 B10F      IN	R16,0x0F
     1A1 9508      RET
(0066)  
(0067) }
(0068) 
(0069) 
(0070) void init_devices(void)
(0071) {
(0072)  CLI(); //禁止所有中断
_init_devices:
     1A2 94F8      BCLR	7
(0073)  MCUCR  = 0x00;
     1A3 2422      CLR	R2
     1A4 BE25      OUT	0x35,R2
(0074)  MCUCSR = 0x80;//禁止JTAG
     1A5 E880      LDI	R24,0x80
     1A6 BF84      OUT	0x34,R24
(0075)  GICR   = 0x00;
     1A7 BE2B      OUT	0x3B,R2
(0076)  port_init();
     1A8 DFDA      RCALL	_port_init
(0077)  spi_init();
     1A9 DFE3      RCALL	_spi_init
(0078)  SEI();//开全局中断
     1AA 9478      BSET	7
     1AB 9508      RET
(0079) }
(0080) //主函数
(0081) void main(void)
(0082) {
(0083)  init_devices();
_main:
     1AC DFF5      RCALL	_init_devices
(0084)  SEG_INIT();
     1AD DF26      RCALL	_SEG_INIT
(0085)  delay(100); 
     1AE E604      LDI	R16,0x64
     1AF E010      LDI	R17,0
     1B0 DFBA      RCALL	_delay
     1B1 C009      RJMP	0x01BB
(0086)  while(!(k==8))
(0087)  {
(0088)      SEG_R(spi_read());
     1B2 DFE4      RCALL	_spi_read
     1B3 2711      CLR	R17
     1B4 DF75      RCALL	_SEG_R
(0089) 	   delay(100); 
     1B5 E604      LDI	R16,0x64
     1B6 E010      LDI	R17,0
     1B7 DFB3      RCALL	_delay
(0090) 	 SEG_L(spi_read());
     1B8 DFDE      RCALL	_spi_read
     1B9 2711      CLR	R17
     1BA DF2E      RCALL	_SEG_L
     1BB 9180 0060 LDS	R24,k
     1BD 3088      CPI	R24,0x8
     1BE F799      BNE	0x01B2
(0091)  }
(0092)  spi_write(255);
     1BF EF0F      LDI	R16,0xFF
     1C0 DFD2      RCALL	_spi_write
(0093)  while(1)
FILE: <library>
     1C1 CFFF      RJMP	0x01C1
     1C2 9508      RET
push_arg4:
     1C3 933A      ST	R19,-Y
     1C4 932A      ST	R18,-Y
push_arg2:
     1C5 931A      ST	R17,-Y
     1C6 930A      ST	R16,-Y
     1C7 9508      RET
mod16u:
     1C8 9468      BSET	6
     1C9 C001      RJMP	xdiv16u
div16u:
     1CA 94E8      BCLR	6
xdiv16u:
     1CB 92EA      ST	R14,-Y
     1CC 92FA      ST	R15,-Y
     1CD 938A      ST	R24,-Y
     1CE 24EE      CLR	R14
     1CF 24FF      CLR	R15
     1D0 E180      LDI	R24,0x10
     1D1 0F00      LSL	R16
     1D2 1F11      ROL	R17
     1D3 1CEE      ROL	R14
     1D4 1CFF      ROL	R15
     1D5 16E2      CP	R14,R18
     1D6 06F3      CPC	R15,R19
     1D7 F018      BCS	0x01DB
     1D8 1AE2      SUB	R14,R18
     1D9 0AF3      SBC	R15,R19
     1DA 9503      INC	R16
     1DB 958A      DEC	R24
     1DC F7A1      BNE	0x01D1
     1DD F416      BRTC	0x01E0
     1DE 2D0E      MOV	R16,R14
     1DF 2D1F      MOV	R17,R15
     1E0 9189      LD	R24,Y+
     1E1 90F9      LD	R15,Y+
     1E2 90E9      LD	R14,Y+
     1E3 9508      RET
pop_xgset003C:
     1E4 90A9      LD	R10,Y+
     1E5 90B9      LD	R11,Y+
     1E6 90C9      LD	R12,Y+
     1E7 90D9      LD	R13,Y+
     1E8 9508      RET
pop_xgset00FC:
     1E9 90A9      LD	R10,Y+
     1EA 90B9      LD	R11,Y+
     1EB 90C9      LD	R12,Y+
     1EC 90D9      LD	R13,Y+
     1ED 90E9      LD	R14,Y+
     1EE 90F9      LD	R15,Y+
     1EF 9508      RET
push_xgsetF0FC:
     1F0 937A      ST	R23,-Y
     1F1 936A      ST	R22,-Y
push_xgset30FC:
     1F2 935A      ST	R21,-Y
     1F3 934A      ST	R20,-Y
push_xgset00FC:
     1F4 92FA      ST	R15,-Y
     1F5 92EA      ST	R14,-Y
push_xgset003C:
     1F6 92DA      ST	R13,-Y
     1F7 92CA      ST	R12,-Y
     1F8 92BA      ST	R11,-Y
     1F9 92AA      ST	R10,-Y
     1FA 9508      RET

⌨️ 快捷键说明

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