📄 ptr8000.lis
字号:
.module PTR8000.C
.area text(rom, con, rel)
0000 .dbfile D:\IccAvr\Pei\ptr8000\PTR8000.C
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 25
0000 ; //ICC-AVR application builder : 2006-4-4 11:28:26
0000 ; // Target : M16 PTR8000模块简单测试
0000 ; // Crystal: 11.059Mhz
0000 ;
0000 ; //最关键的是SPI的初始化,MSB首位和极性方式00,极性方式错误,数据则不正确
0000 ;
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ;
0000 ; #include "config.h"
0000 ; #include "nrf905.h"
0000 ;
0000 ; #define MASTER //编译控制是主机还是从机
0000 ;
0000 ; #define T0N 25
0000 ;
0000 ; //32字节数据包发送时间
0000 ; //=650us_StartUp+200us_Preamble+(4+32+2)Byts*8Bit/50000bps*1000000us=6.6ms
0000 ; #define RFTN 10 //发送测试间隔 10*20ms
0000 ;
0000 ; bit bTimer,bRfSend;
0000 ; uchar T0Cnt,RfCnt;
0000 ;
0000 ; void port_init(void)
0000 ; {
0000 .dbline 26
0000 ; PORTA = 0x08;
0000 88E0 ldi R24,8
0002 8BBB out 0x1b,R24
0004 .dbline 27
0004 ; DDRA = 0x37;
0004 87E3 ldi R24,55
0006 8ABB out 0x1a,R24
0008 .dbline 28
0008 ; PORTB = 0x50;
0008 80E5 ldi R24,80
000A 88BB out 0x18,R24
000C .dbline 29
000C ; DDRB = 0xBF;
000C 8FEB ldi R24,191
000E 87BB out 0x17,R24
0010 .dbline 30
0010 ; PORTC = 0x00; //m103 output only
0010 2224 clr R2
0012 25BA out 0x15,R2
0014 .dbline 31
0014 ; DDRC = 0x00;
0014 24BA out 0x14,R2
0016 .dbline 32
0016 ; PORTD = 0x1C;
0016 8CE1 ldi R24,28
0018 82BB out 0x12,R24
001A .dbline 33
001A ; DDRD = 0x80;
001A 80E8 ldi R24,128
001C 81BB out 0x11,R24
001E .dbline -2
001E L1:
001E .dbline 0 ; func end
001E 0895 ret
0020 .dbend
0020 .dbfunc e timer0_init _timer0_init fV
.even
0020 _timer0_init::
0020 .dbline -1
0020 .dbline 41
0020 ; }
0020 ;
0020 ; //TIMER0 initialize - prescale:1024
0020 ; // WGM: Normal
0020 ; // desired value: 20mSec
0020 ; // actual value: 19.908mSec (0.5%)
0020 ; void timer0_init(void)
0020 ; {
0020 .dbline 42
0020 ; TCCR0 = 0x00; //stop
0020 2224 clr R2
0022 23BE out 0x33,R2
0024 .dbline 43
0024 ; TCNT0 = 0x29; //set count
0024 89E2 ldi R24,41
0026 82BF out 0x32,R24
0028 .dbline 44
0028 ; OCR0 = 0xD7; //set compare
0028 87ED ldi R24,215
002A 8CBF out 0x3c,R24
002C .dbline 45
002C ; TCCR0 = 0x05; //start timer
002C 85E0 ldi R24,5
002E 83BF out 0x33,R24
0030 .dbline -2
0030 L2:
0030 .dbline 0 ; func end
0030 0895 ret
0032 .dbend
.area vector(rom, abs)
.org 36
0024 0C941900 jmp _timer0_ovf_isr
.area text(rom, con, rel)
0032 .dbfile D:\IccAvr\Pei\ptr8000\PTR8000.C
0032 .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
.even
0032 _timer0_ovf_isr::
0032 2A92 st -y,R2
0034 8A93 st -y,R24
0036 2FB6 in R2,0x3f
0038 2A92 st -y,R2
003A .dbline -1
003A .dbline 50
003A ; }
003A ;
003A ; #pragma interrupt_handler timer0_ovf_isr:10
003A ; void timer0_ovf_isr(void)
003A ; {
003A .dbline 51
003A ; TCNT0 = 0x29; //reload counter value
003A 89E2 ldi R24,41
003C 82BF out 0x32,R24
003E .dbline 53
003E ;
003E ; if (--T0Cnt==0)
003E 80910100 lds R24,_T0Cnt
0042 8150 subi R24,1
0044 282E mov R2,R24
0046 20920100 sts _T0Cnt,R2
004A 8823 tst R24
004C 31F4 brne L4
004E .dbline 54
004E ; {T0Cnt=T0N;
004E .dbline 54
004E 89E1 ldi R24,25
0050 80930100 sts _T0Cnt,R24
0054 .dbline 55
0054 ; bTimer=1;
0054 81E0 ldi R24,1
0056 80930300 sts _bTimer,R24
005A .dbline 56
005A ; }
005A L4:
005A .dbline 57
005A 80910000 lds R24,_RfCnt
005E 8150 subi R24,1
0060 282E mov R2,R24
0062 20920000 sts _RfCnt,R2
0066 8823 tst R24
0068 31F4 brne L6
006A .dbline 58
006A .dbline 58
006A 8AE0 ldi R24,10
006C 80930000 sts _RfCnt,R24
0070 .dbline 59
0070 81E0 ldi R24,1
0072 80930200 sts _bRfSend,R24
0076 .dbline 60
0076 L6:
0076 .dbline -2
0076 L3:
0076 2990 ld R2,y+
0078 2FBE out 0x3f,R2
007A 8991 ld R24,y+
007C 2990 ld R2,y+
007E .dbline 0 ; func end
007E 1895 reti
0080 .dbend
0080 .dbfunc e timer1_init _timer1_init fV
.even
0080 _timer1_init::
0080 .dbline -1
0080 .dbline 68
0080 ; if (--RfCnt==0)
0080 ; {RfCnt=RFTN;
0080 ; bRfSend=1;
0080 ; }
0080 ; }
0080 ;
0080 ; //TIMER1 initialize - prescale:8
0080 ; // WGM: 0) Normal, TOP=0xFFFF
0080 ; // desired value: 10mSec
0080 ; // actual value: 9.999mSec (0.0%)
0080 ; void timer1_init(void)
0080 ; {
0080 .dbline 69
0080 ; TCCR1B = 0x00; //stop
0080 2224 clr R2
0082 2EBC out 0x2e,R2
0084 .dbline 70
0084 ; TCNT1H = 0xCA; //setup
0084 8AEC ldi R24,202
0086 8DBD out 0x2d,R24
0088 .dbline 71
0088 ; TCNT1L = 0x01;
0088 81E0 ldi R24,1
008A 8CBD out 0x2c,R24
008C .dbline 72
008C ; OCR1AH = 0x35;
008C 85E3 ldi R24,53
008E 8BBD out 0x2b,R24
0090 .dbline 73
0090 ; OCR1AL = 0xFF;
0090 8FEF ldi R24,255
0092 8ABD out 0x2a,R24
0094 .dbline 74
0094 ; OCR1BH = 0x35;
0094 85E3 ldi R24,53
0096 89BD out 0x29,R24
0098 .dbline 75
0098 ; OCR1BL = 0xFF;
0098 8FEF ldi R24,255
009A 88BD out 0x28,R24
009C .dbline 76
009C ; ICR1H = 0x35;
009C 85E3 ldi R24,53
009E 87BD out 0x27,R24
00A0 .dbline 77
00A0 ; ICR1L = 0xFF;
00A0 8FEF ldi R24,255
00A2 86BD out 0x26,R24
00A4 .dbline 78
00A4 ; TCCR1A = 0x00;
00A4 2FBC out 0x2f,R2
00A6 .dbline 79
00A6 ; TCCR1B = 0x02; //start Timer
00A6 82E0 ldi R24,2
00A8 8EBD out 0x2e,R24
00AA .dbline -2
00AA L8:
00AA .dbline 0 ; func end
00AA 0895 ret
00AC .dbend
.area vector(rom, abs)
.org 32
0020 0C945600 jmp _timer1_ovf_isr
.area text(rom, con, rel)
00AC .dbfile D:\IccAvr\Pei\ptr8000\PTR8000.C
00AC .dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
00AC _timer1_ovf_isr::
00AC 8A93 st -y,R24
00AE 8FB7 in R24,0x3f
00B0 8A93 st -y,R24
00B2 .dbline -1
00B2 .dbline 84
00B2 ; }
00B2 ;
00B2 ; #pragma interrupt_handler timer1_ovf_isr:9
00B2 ; void timer1_ovf_isr(void)
00B2 ; {
00B2 .dbline 86
00B2 ; //TIMER1 has overflowed
00B2 ; TCNT1H = 0xCA; //reload counter high value
00B2 8AEC ldi R24,202
00B4 8DBD out 0x2d,R24
00B6 .dbline 87
00B6 ; TCNT1L = 0x01; //reload counter low value
00B6 81E0 ldi R24,1
00B8 8CBD out 0x2c,R24
00BA .dbline -2
00BA L9:
00BA 8991 ld R24,y+
00BC 8FBF out 0x3f,R24
00BE 8991 ld R24,y+
00C0 .dbline 0 ; func end
00C0 1895 reti
00C2 .dbend
00C2 .dbfunc e spi_init _spi_init fV
00C2 ; temp -> R16
.even
00C2 _spi_init::
00C2 .dbline -1
00C2 .dbline 92
00C2 ; }
00C2 ;
00C2 ; //SPI initialize
00C2 ; void spi_init(void)
00C2 ; {uchar temp;
00C2 .dbline 95
00C2 ;
00C2 ; //SPCR = 0xD1; //SPI中断允许,SPI允许,主机模式,MSB,极性方式00,1/16系统时钟速率
00C2 ; SPCR = 0x51; //不使用SPI中断,其它同上
00C2 81E5 ldi R24,81
00C4 8DB9 out 0xd,R24
00C6 .dbline 96
00C6 ; SPSR = 0x00; //setup SPI
00C6 2224 clr R2
00C8 2EB8 out 0xe,R2
00CA .dbline 98
00CA ;
00CA ; temp = SPSR; //!!!
00CA 0EB1 in R16,0xe
00CC .dbline 99
00CC ; temp = SPDR; //清空SPI,和中断标志,使SPI空闲
00CC 0FB1 in R16,0xf
00CE .dbline -2
00CE L10:
00CE .dbline 0 ; func end
00CE 0895 ret
00D0 .dbsym r temp 16 c
00D0 .dbend
.area vector(rom, abs)
.org 40
0028 0C946800 jmp _spi_stc_isr
.area text(rom, con, rel)
00D0 .dbfile D:\IccAvr\Pei\ptr8000\PTR8000.C
00D0 .dbfunc e spi_stc_isr _spi_stc_isr fV
00D0 ; data -> R0
.even
00D0 _spi_stc_isr::
00D0 .dbline -1
00D0 .dbline 104
00D0 ; }
00D0 ;
00D0 ; #pragma interrupt_handler spi_stc_isr:11
00D0 ; void spi_stc_isr(void)
00D0 ; {uchar data;
00D0 .dbline -2
00D0 L11:
00D0 .dbline 0 ; func end
00D0 1895 reti
00D2 .dbsym l data 1 c
00D2 .dbend
00D2 .dbfunc e uart0_init _uart0_init fV
.even
00D2 _uart0_init::
00D2 .dbline -1
00D2 .dbline 116
00D2 ; //byte in SPDR has been sent/received
00D2 ; //data=SPDR;
00D2 ; //SPDR=0x66;
00D2 ; }
00D2 ;
00D2 ; //UART0 initialize
00D2 ; // desired baud rate: 19200
00D2 ; // actual: baud rate:19200 (0.0%)
00D2 ; // char size: 5 bits
00D2 ; // parity: Disabled
00D2 ; void uart0_init(void)
00D2 ; {
00D2 .dbline 117
00D2 ; UCSRB = 0x00; //disable while setting baud rate
00D2 2224 clr R2
00D4 2AB8 out 0xa,R2
00D6 .dbline 118
00D6 ; UCSRA = 0x00;
00D6 2BB8 out 0xb,R2
00D8 .dbline 119
00D8 ; UCSRC = BIT(URSEL) | 0x00;
00D8 80E8 ldi R24,128
00DA 80BD out 0x20,R24
00DC .dbline 120
00DC ; UBRRL = 0x23; //set baud rate lo
00DC 83E2 ldi R24,35
00DE 89B9 out 0x9,R24
00E0 .dbline 121
00E0 ; UBRRH = 0x00; //set baud rate hi
00E0 20BC out 0x20,R2
00E2 .dbline 122
00E2 ; UCSRB = 0x18;
00E2 88E1 ldi R24,24
00E4 8AB9 out 0xa,R24
00E6 .dbline -2
00E6 L12:
00E6 .dbline 0 ; func end
00E6 0895 ret
00E8 .dbend
00E8 .dbfunc e init_devices _init_devices fV
.even
00E8 _init_devices::
00E8 .dbline -1
00E8 .dbline 127
00E8 ; }
00E8 ;
00E8 ; //call this routine to initialize all peripherals
00E8 ; void init_devices(void)
00E8 ; {
00E8 .dbline 129
00E8 ; //stop errant interrupts until set up
00E8 ; CLI(); //disable all interrupts
00E8 F894 cli
00EA .dbline 130
00EA ; port_init();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -