?? main.lis
字號:
.module main.c
.area text(rom, con, rel)
0000 .dbfile I:\REDFOX~1\Remote\main.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 49
0000 ;
0000 ; //ICC-AVR application builder : 2007-11-18 19:20:12
0000 ; // Target : T26
0000 ; // Crystal: 2.0000Mhz
0000 ;
0000 ;
0000 ;
0000 ; #include <iot26v.h>
0000 ; #include <macros.h>
0000 ;
0000 ;
0000 ;
0000 ; #define uchar unsigned char
0000 ; #define uint unsigned int
0000 ;
0000 ; #define UP 0xC0
0000 ; #define STOP 0xA0
0000 ; #define DOWN 0x60
0000 ;
0000 ;
0000 ; #define SET_LED1 PORTB |= (1<<PB5)
0000 ; #define CLR_LED1 PORTB &= ~(1<<PB5)
0000 ;
0000 ; #define SET_LED2 PORTB |= (1<<PB4)
0000 ; #define CLR_LED2 PORTB &= ~(1<<PB4)
0000 ;
0000 ; #define SET_RLY1 PORTA |= (1<<PA1)
0000 ; #define CLR_RLY1 PORTA &= ~(1<<PA1)
0000 ;
0000 ; #define SET_RLY2 PORTA |= (1<<PA0)
0000 ; #define CLR_RLY2 PORTA &= ~(1<<PA0)
0000 ;
0000 ;
0000 ;
0000 ; uchar flag_4ms;
0000 ; uchar led_time;
0000 ; uint key,key1,key2;
0000 ;
0000 ; uchar flag,rxd_flag;
0000 ; uchar start,bits;
0000 ; uchar timeH,timeL;
0000 ; uchar datas;
0000 ; uchar addrH,addrL;
0000 ; uint addr;
0000 ; uchar rxd_data;
0000 ;
0000 ;
0000 ; void port_init(void)
0000 ; {
0000 .dbline 50
0000 ; PORTB = 0x0F;
0000 8FE0 ldi R24,15
0002 88BB out 0x18,R24
0004 .dbline 51
0004 ; DDRB = 0x30;
0004 80E3 ldi R24,48
0006 87BB out 0x17,R24
0008 .dbline 53
0008 ;
0008 ; PORTA = 0xE0;
0008 80EE ldi R24,224
000A 8BBB out 0x1b,R24
000C .dbline 54
000C ; DDRA = 0x03;
000C 83E0 ldi R24,3
000E 8ABB out 0x1a,R24
0010 .dbline -2
0010 L1:
0010 .dbline 0 ; func end
0010 0895 ret
0012 .dbend
0012 .dbfunc e timer0_init _timer0_init fV
.even
0012 _timer0_init::
0012 .dbline -1
0012 .dbline 59
0012 ; }
0012 ;
0012 ;
0012 ; void timer0_init(void)
0012 ; {
0012 .dbline 60
0012 ; TCCR0 = 0x00; //stop
0012 2224 clr R2
0014 23BE out 0x33,R2
0016 .dbline 61
0016 ; TCNT0 = 0x83; //set count
0016 83E8 ldi R24,131
0018 82BF out 0x32,R24
001A .dbline 62
001A ; TCCR0 = 0x03; //start timer
001A 83E0 ldi R24,3
001C 83BF out 0x33,R24
001E .dbline -2
001E L2:
001E .dbline 0 ; func end
001E 0895 ret
0020 .dbend
0020 .dbfunc e timer1_init _timer1_init fV
.even
0020 _timer1_init::
0020 .dbline -1
0020 .dbline 66
0020 ; }
0020 ;
0020 ; void timer1_init(void)
0020 ; {
0020 .dbline 67
0020 ; TCCR1B = 0x00; //stop
0020 2224 clr R2
0022 2FBC out 0x2f,R2
0024 .dbline 68
0024 ; TCNT1 = 0x06;
0024 86E0 ldi R24,6
0026 8EBD out 0x2e,R24
0028 .dbline 69
0028 ; OCR1A = 0xFA;
0028 8AEF ldi R24,250
002A 8DBD out 0x2d,R24
002C .dbline 70
002C ; OCR1B = 0xFA;
002C 8CBD out 0x2c,R24
002E .dbline 71
002E ; OCR1C = 0x80;
002E 80E8 ldi R24,128
0030 8BBD out 0x2b,R24
0032 .dbline 72
0032 ; TCCR1A = 0x00;
0032 20BE out 0x30,R2
0034 .dbline -2
0034 L3:
0034 .dbline 0 ; func end
0034 0895 ret
0036 .dbend
0036 .dbfunc e init_eeprom _init_eeprom fV
.even
0036 _init_eeprom::
0036 .dbline -1
0036 .dbline 78
0036 ; //TCCR1B = 0x05; //start Timer
0036 ; }
0036 ;
0036 ;
0036 ; void init_eeprom(void)
0036 ; {
0036 .dbline 79
0036 ; EECR = 0x07;
0036 87E0 ldi R24,7
0038 8CBB out 0x1c,R24
003A .dbline -2
003A L4:
003A .dbline 0 ; func end
003A 0895 ret
003C .dbend
003C .dbfunc e EEPROM_write _EEPROM_write fV
003C ; Datas -> R18
003C ; Address -> R16
.even
003C _EEPROM_write::
003C .dbline -1
003C .dbline 85
003C ; }
003C ;
003C ;
003C ;
003C ; void EEPROM_write(unsigned char Address, unsigned char Datas)
003C ; {
003C L6:
003C .dbline 86
003C L7:
003C .dbline 86
003C ; while(EECR & (1<<EEWE));// 等待上一次寫操作結束
003C E199 sbic 0x1c,1
003E FECF rjmp L6
0040 .dbline 88
0040 ;
0040 ; EEARL= Address; // 設置地址和數據寄存器
0040 0EBB out 0x1e,R16
0042 .dbline 89
0042 ; EEDR = Datas;
0042 2DBB out 0x1d,R18
0044 .dbline 90
0044 ; EECR |= (1<<EEMWE); // 置位EEMWE
0044 E29A sbi 0x1c,2
0046 .dbline 91
0046 ; EECR |= (1<<EEWE); // 置位EEWE 以啟動寫操作E
0046 E19A sbi 0x1c,1
0048 .dbline -2
0048 L5:
0048 .dbline 0 ; func end
0048 0895 ret
004A .dbsym r Datas 18 c
004A .dbsym r Address 16 c
004A .dbend
004A .dbfunc e EEPROM_read _EEPROM_read fc
004A ; uiAddress -> R16
.even
004A _EEPROM_read::
004A .dbline -1
004A .dbline 96
004A ; }
004A ;
004A ;
004A ; unsigned char EEPROM_read(unsigned char uiAddress)
004A ; {
004A L10:
004A .dbline 97
004A L11:
004A .dbline 97
004A ; while(EECR&(1<<EEWE)); //等待上一次寫操作結束
004A E199 sbic 0x1c,1
004C FECF rjmp L10
004E .dbline 98
004E ; EEARL = uiAddress; // 設置地址寄存器
004E 0EBB out 0x1e,R16
0050 .dbline 99
0050 ; EECR |= (1<<EERE); // 設置EERE 以啟動讀操作
0050 E09A sbi 0x1c,0
0052 .dbline 100
0052 ; return EEDR; // 自數據寄存器返回數據
0052 0DB3 in R16,0x1d
0054 .dbline -2
0054 L9:
0054 .dbline 0 ; func end
0054 0895 ret
0056 .dbsym r uiAddress 16 c
0056 .dbend
0056 .dbfunc e init_devices _init_devices fV
.even
0056 _init_devices::
0056 .dbline -1
0056 .dbline 111
0056 ; }
0056 ;
0056 ;
0056 ;
0056 ;
0056 ;
0056 ;
0056 ;
0056 ; //call this routine to initialize all peripherals
0056 ; void init_devices(void)
0056 ; {
0056 .dbline 112
0056 ; CLI(); //disable all interrupts
0056 F894 cli
0058 .dbline 114
0058 ;
0058 ; port_init();
0058 D3DF rcall _port_init
005A .dbline 115
005A ; timer0_init();
005A DBDF rcall _timer0_init
005C .dbline 116
005C ; timer1_init();
005C E1DF rcall _timer1_init
005E .dbline 117
005E ; init_eeprom();
005E EBDF rcall _init_eeprom
0060 .dbline 119
0060 ;
0060 ; MCUCR = 0x02;
0060 82E0 ldi R24,2
0062 85BF out 0x35,R24
0064 .dbline 120
0064 ; TIMSK = 0x06; //timer interrupt sources
0064 86E0 ldi R24,6
0066 89BF out 0x39,R24
0068 .dbline 121
0068 ; GIMSK = 0x40; //interrupt sources
0068 80E4 ldi R24,64
006A 8BBF out 0x3b,R24
006C .dbline 122
006C ; PLLCSR = 0x00; //PLL
006C 2224 clr R2
006E 29BC out 0x29,R2
0070 .dbline 123
0070 ; WDR(); //this prevents a timout on enabling
0070 A895 wdr
0072 .dbline 124
0072 ; WDTCR = 0x08; //WATCHDOG ENABLED - dont forget to issue WD
0072 88E0 ldi R24,8
0074 81BD out 0x21,R24
0076 .dbline 126
0076 ;
0076 ; SEI(); //re-enable interrupts
0076 7894 sei
0078 .dbline -2
0078 L13:
0078 .dbline 0 ; func end
0078 0895 ret
007A .dbend
007A .dbfunc e key_scan _key_scan fV
007A ; temp -> R16
.even
007A _key_scan::
007A .dbline -1
007A .dbline 135
007A ; }
007A ;
007A ;
007A ; /*---------------------------------------------------------------
007A ; 按鍵掃描
007A ; ----------------------------------------------------------------*/
007A ;
007A ; void key_scan(void)
007A ; {
007A .dbline 138
007A ; uchar temp;
007A ;
007A ; temp = PINA & 0xE0;
007A 09B3 in R16,0x19
007C 007E andi R16,224
007E .dbline 140
007E ;
007E ; if(temp==UP)
007E 003C cpi R16,192
0080 A1F4 brne L15
0082 .dbline 141
0082 ; {
0082 .dbline 142
0082 ; SET_LED2;
0082 C49A sbi 0x18,4
0084 .dbline 144
0084 ; //if(key<500)
0084 ; {
0084 .dbline 145
0084 ; key ++;
0084 80911000 lds R24,_key
0088 90911100 lds R25,_key+1
008C 0196 adiw R24,1
008E 90931100 sts _key+1,R25
0092 80931000 sts _key,R24
0096 .dbline 146
0096 ; if(key>=5)
0096 8530 cpi R24,5
0098 E0E0 ldi R30,0
009A 9E07 cpc R25,R30
009C 08F4 brsh X0
009E 3BC0 rjmp L16
00A0 X0:
00A0 .dbline 147
00A0 ; {
00A0 .dbline 148
00A0 ; CLR_RLY2;
00A0 D898 cbi 0x1b,0
00A2 .dbline 149
00A2 ; asm("nop");
00A2 0000 nop
00A4 .dbline 150
00A4 ; asm("nop");
00A4 0000 nop
00A6 .dbline 151
00A6 ; SET_RLY1;
00A6 D99A sbi 0x1b,1
00A8 .dbline 152
00A8 ; }
00A8 .dbline 153
00A8 ; }
00A8 .dbline 154
00A8 ; }
00A8 36C0 rjmp L16
00AA L15:
00AA .dbline 156
00AA ;
00AA ; else if(temp==STOP) // k1
00AA 003A cpi R16,160
00AC 89F4 brne L19
00AE .dbline 157
00AE ; {
00AE .dbline 158
00AE ; SET_LED2;
00AE C49A sbi 0x18,4
00B0 .dbline 160
00B0 ; //if(key1<500)
00B0 ; {
00B0 .dbline 161
00B0 ; key1 ++;
00B0 80910E00 lds R24,_key1
00B4 90910F00 lds R25,_key1+1
00B8 0196 adiw R24,1
00BA 90930F00 sts _key1+1,R25
00BE 80930E00 sts _key1,R24
00C2 .dbline 162
00C2 ; if(key1>=5) // 短按
00C2 8530 cpi R24,5
00C4 E0E0 ldi R30,0
00C6 9E07 cpc R25,R30
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -