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

📄 ptr8000.lis

📁 本文档是从MCS51向AVR的快速转换的说明文档.
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .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 + -