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

📄 main.lst

📁 此程序为利用mage8 AVR 和EM4094实现读取TYPE A类型卡的C程序、读卡稳定、这个项目我们做了好久、非常不错的程序、很适合做这方面产品的朋友们参考
💻 LST
📖 第 1 页 / 共 5 页
字号:
  64:main.c        **** uint8_t alarm_time;
  65:main.c        **** uint8_t alarm_enable;
  66:main.c        **** 
  67:main.c        **** // ==================================================================
  68:main.c        **** // global function declaration;
  69:main.c        **** void UARTIni( void );                    // initialization of UART
  70:main.c        **** void avr_ini( void );
  71:main.c        **** void Beep( uint8_t times );
  72:main.c        **** void Beep_Long( void );
  73:main.c        **** void Delayms( uint16_t count );
  74:main.c        **** void Delayus( uint16_t count );
  75:main.c        **** void Parse_Command( uint8_t cmd , uint8_t param );
  76:main.c        **** void main_receiver( void );
  77:main.c        **** int main( void );
  78:main.c        **** uint8_t Check_EEPROM( void );
  79:main.c        **** void Reset_To_Default( void );
  80:main.c        **** void WatchDog_Feed( void );
  81:main.c        **** //uint8_t Compare_Weigan_Data( void );
  82:main.c        **** void Send_Card_ID( uint8_t format , uint8_t *data );
  83:main.c        **** void Alarm_Check_And_Process( void );
  84:main.c        **** 
  85:main.c        **** 
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccygaaaa.s 			page 6


  86:main.c        **** // ********************************************************************************************
  87:main.c        **** // Description : UART initialize routinue.
  88:main.c        **** // Return value: None.   
  89:main.c        **** // parameter   : None.  
  90:main.c        **** // ********************************************************************************************
  91:main.c        **** 
  92:main.c        **** void UARTIni( void ) 
  93:main.c        **** {
 201               		.stabn 68,0,93,.LM1-UARTIni
 202               	.LM1:
 203               	/* prologue: frame size=0 */
 204               	/* prologue end (size=0) */
  94:main.c        ****     // UCSRA is not necessary to set up, using initial valuses         
  95:main.c        ****     // no double transmission speed, no multi-processor mode           
  96:main.c        ****     //UCSRA: RXC , TXC , UDRE , FE , DOR , PE , U2X , MPCM ;
  97:main.c        ****     //UCSRB: RXCIE, TXCIE, UDRIE, RXEN, TXEN, UCSZ2, RXB8,TXB8 ;
  98:main.c        **** //    UCSRB  = ( 1 << RXCIE ) | ( 0 << UDRIE ) | ( 1 << RXEN ) | ( 1 << TXEN ); 
  99:main.c        ****     UCSRB  = ( 1 << RXCIE ) | ( 0 << TXCIE ) | ( 1 << RXEN ) | ( 1 << TXEN );  
 205               		.stabn 68,0,99,.LM2-UARTIni
 206               	.LM2:
 207 0000 88E9      		ldi r24,lo8(-104)
 208 0002 8AB9      		out 42-0x20,r24
 100:main.c        ****                        // set up : RXCIE, UDRIE, RXEN, TXEN           
 101:main.c        ****                        // (interrupt enable from receiver,            
 102:main.c        ****                        // UART receiver enable, UART transmit enable) 
 103:main.c        ****     // UCSRC: URSEL, UMSEL, UPM1, UPM0, USBS, UCSZ1, UCSZ0, UCPOL ;
 104:main.c        ****     UCSRC = ( 1 << URSEL ) | ( 1 << UCSZ1 ) | ( 1 << UCSZ0 ); 
 209               		.stabn 68,0,104,.LM3-UARTIni
 210               	.LM3:
 211 0004 86E8      		ldi r24,lo8(-122)
 212 0006 80BD      		out 64-0x20,r24
 105:main.c        ****                        // asynchronous operation, 8 data bits,        
 106:main.c        ****                        // no parity, 1 stop bit                       
 107:main.c        **** //      UCSRC = ( 1 << URSEL ) | ( 1 << UPM1 ) | ( 1 << UPM0 ) | ( 1 << UCSZ1 ) | ( 1 << UCSZ0 );
 108:main.c        ****                        // asynchronous operation, 8 data bits, odd parity, 1 stop bit;
 109:main.c        ****     UBRRL = 103;        // baud rate - see UBRR register setting table 
 213               		.stabn 68,0,109,.LM4-UARTIni
 214               	.LM4:
 215 0008 87E6      		ldi r24,lo8(103)
 216 000a 89B9      		out 41-0x20,r24
 110:main.c        ****                        //             in AVR ATmega8 specification    
 111:main.c        ****                        // UBRRH - using initial values                
 112:main.c        ****                        // UBRRL - 103 for 9.6Kbps and frequency f=16 MHz 
 113:main.c        ****                        // (using SINGLE transmission speed)   
 114:main.c        **** //      UBRRL = 51;        // baud rate - 19200;                          
 115:main.c        **** 
 116:main.c        ****     rx_number = 0;
 217               		.stabn 68,0,116,.LM5-UARTIni
 218               	.LM5:
 219 000c 1092 0000 		sts rx_number,__zero_reg__
 117:main.c        ****     tx_number = 0;
 220               		.stabn 68,0,117,.LM6-UARTIni
 221               	.LM6:
 222 0010 1092 0000 		sts tx_number,__zero_reg__
 118:main.c        ****     valid_data_flag = 0;         //This sign indicate if there is a valid command received;
 223               		.stabn 68,0,118,.LM7-UARTIni
 224               	.LM7:
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccygaaaa.s 			page 7


 225 0014 1092 0000 		sts valid_data_flag,__zero_reg__
 119:main.c        **** 
 120:main.c        **** }
 226               		.stabn 68,0,120,.LM8-UARTIni
 227               	.LM8:
 228               	/* epilogue: frame size=0 */
 229 0018 0895      		ret
 230               	/* epilogue end (size=1) */
 231               	/* function UARTIni size 13 (12) */
 232               		.size	UARTIni, .-UARTIni
 233               	.Lscope0:
 234               		.stabs	"",36,0,0,.Lscope0-UARTIni
 235               		.stabs	"avr_ini:F(0,20)",36,0,129,avr_ini
 236               	.global	avr_ini
 237               		.type	avr_ini, @function
 238               	avr_ini:
 121:main.c        **** 
 122:main.c        **** // ********************************************************************************************
 123:main.c        **** // Description : Atmega8 device initialize.
 124:main.c        **** // Return value: None.   
 125:main.c        **** // parameter   : None.
 126:main.c        **** // ********************************************************************************************
 127:main.c        **** 
 128:main.c        **** void avr_ini( void )
 129:main.c        **** {
 239               		.stabn 68,0,129,.LM9-avr_ini
 240               	.LM9:
 241               	/* prologue: frame size=0 */
 242 001a 1F93      		push r17
 243               	/* prologue end (size=1) */
 130:main.c        **** 
 131:main.c        ****     UARTIni(); 
 244               		.stabn 68,0,131,.LM10-avr_ini
 245               	.LM10:
 246 001c F1DF      		rcall UARTIni
 132:main.c        ****              
 133:main.c        ****     // --------------------------------------------------------------- 
 134:main.c        ****     // 16-bit Timer/Counter1 initialization                            
 135:main.c        ****     // --------------------------------------------------------------- 
 136:main.c        **** 
 137:main.c        ****     TCCR1A = 0;         // no compare otuput, no PWM mode ...  
 247               		.stabn 68,0,137,.LM11-avr_ini
 248               	.LM11:
 249 001e 1FBC      		out 79-0x20,__zero_reg__
 138:main.c        ****     TCCR1B = 0;         // stopped on startup
 250               		.stabn 68,0,138,.LM12-avr_ini
 251               	.LM12:
 252 0020 1EBC      		out 78-0x20,__zero_reg__
 139:main.c        **** 
 140:main.c        ****     // --------------------------------------------------------------- 
 141:main.c        ****     // I/O Ports initialization                                        
 142:main.c        ****     // --------------------------------------------------------------- 
 143:main.c        **** 
 144:main.c        ****     DDRB  = 0x06;
 253               		.stabn 68,0,144,.LM13-avr_ini
 254               	.LM13:
 255 0022 86E0      		ldi r24,lo8(6)
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccygaaaa.s 			page 8


 256 0024 87BB      		out 55-0x20,r24
 145:main.c        ****     DDRC  = 0x37;
 257               		.stabn 68,0,145,.LM14-avr_ini
 258               	.LM14:
 259 0026 87E3      		ldi r24,lo8(55)
 260 0028 84BB      		out 52-0x20,r24
 146:main.c        ****     DDRD  = 0xC2;
 261               		.stabn 68,0,146,.LM15-avr_ini
 262               	.LM15:
 263 002a 82EC      		ldi r24,lo8(-62)
 264 002c 81BB      		out 49-0x20,r24
 147:main.c        ****     
 148:main.c        ****     PORTB = 0x00;        //如果weigan0和weigan1不置低,则wd0和wd1第一次输出会有问题;
 265               		.stabn 68,0,148,.LM16-avr_ini
 266               	.LM16:
 267 002e 18BA      		out 56-0x20,__zero_reg__
 149:main.c        ****     PORTC = 0x01;
 268               		.stabn 68,0,149,.LM17-avr_ini
 269               	.LM17:
 270 0030 81E0      		ldi r24,lo8(1)
 271 0032 85BB      		out 53-0x20,r24
 150:main.c        ****     PORTD = 0xC0;       
 272               		.stabn 68,0,150,.LM18-avr_ini
 273               	.LM18:
 274 0034 80EC      		ldi r24,lo8(-64)
 275 0036 82BB      		out 50-0x20,r24
 151:main.c        ****                                        
 152:main.c        ****     // --------------------------------------------------------------- 
 153:main.c        ****     // Watch Dog Setup
 154:main.c        ****     // --------------------------------------------------------------- 
 155:main.c        ****     cbi( MCUCSR , WDRF );  //clear watchdog reset flag
 276               		.stabn 68,0,155,.LM19-avr_ini
 277               	.LM19:
 278 0038 84B7      		in r24,84-0x20
 279 003a 877F      		andi r24,lo8(-9)
 280 003c 84BF      		out 84-0x20,r24
 156:main.c        ****     wdt_enable( 0x07 );    //set timeout of Watchdog is 2.1s;
 281               		.stabn 68,0,156,.LM20-avr_ini
 282               	.LM20:
 283 003e 88E1      		ldi r24,lo8(24)
 284 0040 90E0      		ldi r25,hi8(24)
 285 0042 2FE0      		ldi r18,lo8(15)
 286               	/* #APP */
 287 0044 0FB6      		in __tmp_reg__,__SREG__
 288 0046 F894      		cli
 289 0048 A895      		wdr
 290 004a 81BD      		out 33,r24
 291 004c 0FBE      		out __SREG__,__tmp_reg__
 292 004e 21BD      		out 33,r18
 157:main.c        **** 
 158:main.c        ****     while ( Check_EEPROM( ) == 0x00 )       //Ensure EEPROM is ok;
 293               		.stabn 68,0,158,.LM21-avr_ini
 294               	.LM21:
 295               	/* #NOAPP */
 296               	.L3:
 297 0050 71D1      		rcall Check_EEPROM
 298 0052 8823      		tst r24
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccygaaaa.s 			page 9


 299 0054 11F4      		brne .L19
 159:main.c        ****     	  Reset_To_Default( );
 300               		.stabn 68,0,159,.LM22-avr_ini
 301               	.LM22:
 302 0056 C9D1      		rcall Reset_To_Default
 303 0058 FBCF      		rjmp .L3
 160:main.c        **** 
 161:main.c        ****     watchdog_feed_flag = 0 ;  //feed dog sign,0 for not feed dog , other value for has feed dog;
 304               		.stabn 68,0,161,.LM23-avr_ini
 305               	.LM23:
 306               	.L19:
 307 005a 1092 0000 		sts watchdog_feed_flag,__zero_reg__
 162:main.c        **** //    weigan_format = 1 ;     //1--Weigan26 , 2--Weigan34 , 3--Weigan36 , 4--Weigan44 , 5--9600bps;
 163:main.c        **** 	  if( eeprom_rb( &WEIGAN_FORMAT ) == eeprom_rb( &WEIGAN_FORMAT_CHK ) )
 308               		.stabn 68,0,163,.LM24-avr_ini
 309               	.LM24:
 310 005e 80E0      		ldi r24,lo8(WEIGAN_FORMAT)
 311 0060 90E0      		ldi r25,hi8(WEIGAN_FORMAT)
 312 0062 00D0      		rcall eeprom_read_byte
 313 0064 182F      		mov r17,r24
 314 0066 80E0      		ldi r24,lo8(WEIGAN_FORMAT_CHK)
 315 0068 90E0      		ldi r25,hi8(WEIGAN_FORMAT_CHK)
 316 006a 00D0      		rcall eeprom_read_byte
 317 006c 1817      		cp r17,r24
 318 006e 91F1      		breq .L20
 164:main.c        **** 	  {	
 165:main.c        **** 	      weigan_format = eeprom_rb( &WEIGAN_FORMAT );
 166:main.c        **** 	  } 
 167:main.c        **** 	  else
 168:main.c        **** 	  	  weigan_format = 0x01;
 319               		.stabn 68,0,168,.LM25-avr_ini
 320               	.LM25:
 321 0070 81E0      		ldi r24,lo8(1)
 322               	.L15:
 323 0072 8093 0000 		sts weigan_format,r24
 169:main.c        **** 	  	   	  
 170:main.c        **** 	  if( eeprom_rb( &ALARM_LEVEL ) == eeprom_rb( &ALARM_LEVEL_CHK ) )   
 324               		.stabn 68,0,170,.LM26-avr_ini
 325               	.LM26:
 326 0076 80E0      		ldi r24,lo8(ALARM_LEVEL)
 327 0078 90E0      		ldi r25,hi8(ALARM_LEVEL)
 328 007a 00D0      		rcall eeprom_read_byte
 329 007c 182F      		mov r17,r24
 330 007e 80E0      		ldi r24,lo8(ALARM_LEVEL_CHK)
 331 0080 90E0      		ldi r25,hi8(ALARM_LEVEL_CHK)
 332 0082 00D0      		rcall eeprom_read_byte
 333 0084 1817      		cp r17,r24
 334 0086 11F1      		breq .L21
 171:main.c        **** 	  	  alarm_level = eeprom_rb( &ALARM_LEVEL );
 172:main.c        **** 	  else
 173:main.c        **** 	  	  alarm_level = 0x01;
 335               		.stabn 68,0,173,.LM27-avr_ini
 336               	.LM27:
 337 0088 81E0      		ldi r24,lo8(1)
 338               	.L16:
 339 008a 8093 0000 		sts alarm_level,r24
 174:main.c        **** 	  	  	  
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccygaaaa.s 			page 10


 175:main.c        **** 	  if( eeprom_rb( &ALARM_TIME ) == eeprom_rb( &ALARM_TIME_CHK ) )   
 340               		.stabn 68,0,175,.LM28-avr_ini
 341               	.LM28:
 342 008e 80E0      		ldi r24,lo8(ALARM_TIME)
 343 0090 90E0      		ldi r25,hi8(ALARM_TIME)
 344 0092 00D0      		rcall eeprom_read_byte
 345 0094 182F      		mov r17,r24
 346 0096 80E0      		ldi r24,lo8(ALARM_TIME_CHK)
 347 0098 90E0      		ldi r25,hi8(ALARM_TIME_CHK)
 348 009a 00D0      		rcall eeprom_read_byte
 349 009c 1817      		cp r17,r24
 350 009e 91F0      		breq .L22
 176:main.c        **** 	  	  alarm_time = eeprom_rb( &ALARM_TIME );   

⌨️ 快捷键说明

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