📄 uart.lis
字号:
.module uart.c
.area lit(rom, con, rel)
0000 _DefaultConfig433::
0000 0FFF .byte 15,255
0002 8F3A .byte 143,58
0004 1001 .byte 16,1
0006 393A .byte 57,58
0008 1AAB .byte 26,171
000A 3944 .byte 57,'D
000C 50BB .byte 'P,187
000E 4625 .byte 'F,37
0010 6155 .byte 'a,'U
0012 2D29 .byte 45,41
0014 2078 .byte 32,'x
0016 4714 .byte 'G,20
0018 22AE .byte 34,174
001A 340F .byte 52,15
001C 0000 .byte 0,0
001E 0000 .byte 0,0
.area data(ram, con, rel)
0000 _PA_POWER::
0000 .blkb 1
.area idata
0000 F0 .byte 240
.area data(ram, con, rel)
0001 _RXANALOG::
0001 .blkb 1
.area idata
0001 47 .byte 71
.area data(ram, con, rel)
0002 _TXANALOG::
0002 .blkb 1
.area idata
0002 47 .byte 71
.area data(ram, con, rel)
.area text(rom, con, rel)
.even
0000 _Initial::
0000 ; #include <iom8v.h>
0000 ; #include "Includes.h"
0000 ; #include"uart.h"
0000 ; #define fosc 8000000 //晶振8.0000MHZ
0000 ; #define baud 4800 //波特率
0000 ; #define maxdata 20000 //采集的最大数值
0000 ; #define voltagedata 0x01 //电压伏值 3个字节
0000 ; #define currentdata 0x02 //电流伏值 3个字节
0000 ; #define entercomm 0x56 //确认帧 0字节
0000 ;
0000 ; #define addressper 0x10 //本机地址
0000 ; // LOCK status definitions
0000 ; #define LOCK_NOK 0x00
0000 ; #define LOCK_OK 0x01
0000 ; #define LOCK_RECAL_OK 0x02
0000 ; #define uchar unsigned char
0000 ; // Maximum number of re-calibration attempts upon calibration failure
0000 ; #define CAL_ATTEMPT_MAX 4
0000 ; // Time-out values
0000 ; #define CAL_TIMEOUT 0x7FFE
0000 ; #define LOCK_TIMEOUT 0x7FFE
0000 ; const unsigned char DefaultConfig433[32] =
0000 ; {
0000 ; 0x0F, // 0x01, INTERFACE
0000 ; 0xFF, // 0x02, RESET
0000 ; 0x8F, // 0x03, SEQUENCING
0000 ;
0000 ; 0x3A, // 0x04, FREQ_2A
0000 ; 0x10, // 0x05, FREQ_1A
0000 ; 0x01, // 0x06, FREQ_0A
0000 ; 0x39, // 0x0B, CLOCK_A 19.2K
0000 ;
0000 ; 0x3A, // 0x08, FREQ_2B
0000 ; 0x1A, // 0x09, FREQ_1B
0000 ; 0xAB, // 0x0A, FREQ_0B
0000 ; 0x39, // 0x0B, CLOCK_A 19.2K
0000 ; 0x44, // 0x0C, VCO
0000 ; 0x50, // 0x0D, MODEM
0000 ; 0xbb, // 0x0E, DEVIATION
0000 ; 0x46, // 0x0F, AFC_CONTROL
0000 ; 0x25, // 0x10, FILTER
0000 ; 0x61, // 0x11, VGA1
0000 ; 0x55, // 0x12, VGA2
0000 ; 0x2d, // 0x13, VGA3
0000 ; 0x29, // 0x14, VGA4
0000 ; 0x20, // 0x15, LOCK
0000 ; 0x78, // 0x16, FRONTEND
0000 ; 0x47, // 0x17, ANALOG, RX=47/TX=47
0000 ; 0x14, // 0x18, BUFF_SWING
0000 ; 0x22, // 0x19, BUFF_CURRENT
0000 ; 0xAE, // 0x1A, PLL_BW
0000 ; 0x34, // 0x1B, CALIBRATE
0000 ; 0x0f, // 0x1C, PA_POWER
0000 ; 0x00, // 0x1D, MATCH
0000 ; 0x00, // 0x1E, PHASE_COMP
0000 ; 0x00, // 0x1F, GAIN_COMP
0000 ; 0x00 // 0x20, POWERDOWN
0000 ; };
0000 ; unsigned char boolval,retrn_val,looptmp;
0000 ; char bool_val;
0000 ; char PA_POWER=0xF0;
0000 ; char RXANALOG=0x47;
0000 ; char TXANALOG=0x47;
0000 ; uchar rcv1[50];
0000 ; uchar rcvd1,rscnt11,rscnt12,rscnt13,rscnt01,xx0,xx1;
0000 ;
0000 ; uchar rsok00,rsok10,rsok20,rsok30,rsok40;
0000 ; //extern unsigned char read_flash(unsigned int add);
0000 ; uchar w1;
0000 ; uchar databak[3],datawn2[3];
0000 ;
0000 ; /* 串口通讯变量定义 */
0000 ;
0000 ; uchar Tx_Rx,Rx_Time;
0000 ;
0000 ; /*--------------------------------------------------------------------------------------------------
0000 ; 变量定义
0000 ; --------------------------------------------------------------------------------------------------*/
0000 ;
0000 ; //********量程切换********//
0000 ; INT8U Rx_Time; // 通讯间隔时间
0000 ;
0000 ; /* 数字滤波 */
0000 ; INT16U Vwn_Buf[13];
0000 ; /*--------------------------------------------------------------------------------------------------
0000 ; 函数定义
0000 ; --------------------------------------------------------------------------------------------------*/
0000 ; void Initial ( void )
0000 ; {
0000 ; Rx_Time = 0;// 通讯间隔时间
0000 2224 clr R2
0002 20921A00 sts _Rx_Time,R2
0006 L1:
0006 .dbline 0 ; func end
0006 0895 ret
.even
0008 _watchdog_init::
0008 ; }
0008 ;
0008 ;
0008 ; //Watchdog initialize
0008 ; // prescale: 2048K
0008 ; void watchdog_init(void)
0008 ; {
0008 ; WDR(); //this prevents a timout on enabling
0008 A895 wdr
000A ; WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
000A 8FE0 ldi R24,15
000C 81BD out 0x21,R24
000E L2:
000E .dbline 0 ; func end
000E 0895 ret
0010 ; c -> R16
.even
0010 _putchar::
0010 ; }
0010 ;
0010 ;
0010 ; /* 字符输出函数 */
0010 ; void putchar(uchar c)
0010 ; {
0010 L4:
0010 L5:
0010 ; while (!(UCSRA&(1<<UDRE)));
0010 5D9B sbis 0xb,5
0012 FECF rjmp L4
0014 ; UDR=c;
0014 0CB9 out 0xc,R16
0016 L3:
0016 .dbline 0 ; func end
0016 0895 ret
.even
0018 _timer0_init::
0018 ; }
0018 ;
0018 ;
0018 ; //TIMER0 initialize - prescale:256
0018 ; // desired value: 5mSec
0018 ; // actual value: 4.965mSec (0.7%)
0018 ; void timer0_init(void)
0018 ; {
0018 ; TCCR0 = 0x00; //stop
0018 2224 clr R2
001A 23BE out 0x33,R2
001C ; TCNT0 = 0x71; //set count
001C 81E7 ldi R24,113
001E 82BF out 0x32,R24
0020 ; TCCR0 = 0x04; //start timer
0020 84E0 ldi R24,4
0022 83BF out 0x33,R24
0024 L7:
0024 .dbline 0 ; func end
0024 0895 ret
.area vector(rom, abs)
.org 18
0012 13C0 rjmp _timer0_ovf_isr
.area text(rom, con, rel)
.even
0026 _timer0_ovf_isr::
0026 8A93 st -y,R24
0028 8FB7 in R24,0x3f
002A 8A93 st -y,R24
002C ; }
002C ;
002C ;
002C ; #pragma interrupt_handler timer0_ovf_isr:10
002C ; void timer0_ovf_isr(void)
002C ; {
002C ; TCNT0 = 0x71; //reload counter value
002C 81E7 ldi R24,113
002E 82BF out 0x32,R24
0030 ; //AD转换
0030 ; WDR();// 喂狗
0030 A895 wdr
0032 L8:
0032 8991 ld R24,y+
0034 8FBF out 0x3f,R24
0036 8991 ld R24,y+
0038 .dbline 0 ; func end
0038 1895 reti
.even
003A _timer1_init::
003A ;
003A ; }
003A ;
003A ; //TIMER1 initialize - prescale:Rising edge
003A ; // WGM: 0) Normal, TOP=0xFFFF
003A ; // desired value: 1Hz
003A ; // actual value: Out of range
003A ; void timer1_init(void)
003A ; {
003A ; TCCR1B = 0x00; //stop
003A 2224 clr R2
003C 2EBC out 0x2e,R2
003E ; TCNT1H = 0x00 /*INVALID SETTING*/; //setup
003E 2DBC out 0x2d,R2
0040 ; TCNT1L = 0x00 /*INVALID SETTING*/;
0040 2CBC out 0x2c,R2
0042 ; OCR1AH = 0x00 /*INVALID SETTING*/;
0042 2BBC out 0x2b,R2
0044 ; OCR1AL = 0x00 /*INVALID SETTING*/;
0044 2ABC out 0x2a,R2
0046 ; OCR1BH = 0x00 /*INVALID SETTING*/;
0046 29BC out 0x29,R2
0048 ; OCR1BL = 0x00 /*INVALID SETTING*/;
0048 28BC out 0x28,R2
004A ; ICR1H = 0x00 /*INVALID SETTING*/;
004A 27BC out 0x27,R2
004C ; ICR1L = 0x00 /*INVALID SETTING*/;
004C 26BC out 0x26,R2
004E ; TCCR1A = 0x00;
004E 2FBC out 0x2f,R2
0050 ; TCCR1B = 0x06; //start Timer
0050 86E0 ldi R24,6
0052 8EBD out 0x2e,R24
0054 L9:
0054 .dbline 0 ; func end
0054 0895 ret
.even
0056 _timer2_init::
0056 ; }
0056 ;
0056 ; //TIMER2 initialize - prescale:32
0056 ; // WGM: Normal
0056 ; // desired value: 1mSec
0056 ; // actual value: 0.998mSec (0.2%)
0056 ; void timer2_init(void)
0056 ; {
0056 ; TCCR2 = 0x00; //stop
0056 2224 clr R2
0058 25BC out 0x25,R2
005A ; ASSR = 0x00; //set async mode
005A 22BC out 0x22,R2
005C ; TCNT2 = 0x1A; //setup
005C 8AE1 ldi R24,26
005E 84BD out 0x24,R24
0060 ; OCR2 = 0xE6;
0060 86EE ldi R24,230
0062 83BD out 0x23,R24
0064 ; TCCR2 = 0x03; //start
0064 83E0 ldi R24,3
0066 85BD out 0x25,R24
0068 L10:
0068 .dbline 0 ; func end
0068 0895 ret
.area vector(rom, abs)
.org 8
0008 35C0 rjmp _timer2_ovf_isr
.area text(rom, con, rel)
.even
006A _timer2_ovf_isr::
006A 2A92 st -y,R2
006C 8A93 st -y,R24
006E 9A93 st -y,R25
0070 2FB6 in R2,0x3f
0072 2A92 st -y,R2
0074 ; }
0074 ;
0074 ; #pragma interrupt_handler timer2_ovf_isr:5
0074 ; void timer2_ovf_isr(void)
0074 ; {
0074 ; TCNT2 = 0x1A; //reload counter value
0074 8AE1 ldi R24,26
0076 84BD out 0x24,R24
0078 ;
0078 ; /* 通讯数据间隔判断*/
0078 ;
0078 ; if(Tx_Rx == 0) // 通讯
0078 20901B00 lds R2,_Tx_Rx
007C 2220 tst R2
007E 09F5 brne L12
0080 ; {
0080 ; if(++Rx_Time > 40) // 间隔时间大于40ms后判断为接收超时
0080 80911A00 lds R24,_Rx_Time
0084 8F5F subi R24,255 ; addi 1
0086 282E mov R2,R24
0088 20921A00 sts _Rx_Time,R2
008C 88E2 ldi R24,40
008E 8215 cp R24,R2
0090 C0F4 brsh L14
0092 ; {
0092 ; Tx_Rx = 2; // 接收结束;
0092 82E0 ldi R24,2
0094 80931B00 sts _Tx_Rx,R24
0098 ; Rx_Time = 0;
0098 2224 clr R2
009A 20921A00 sts _Rx_Time,R2
009E ; rsok00=0;
009E 20922700 sts _rsok00,R2
00A2 ; rsok10=0;
00A2 20922600 sts _rsok10,R2
00A6 ; rsok20=0;
00A6 20922500 sts _rsok20,R2
00AA ; rsok30=0;
00AA 20922400 sts _rsok30,R2
00AE ; rsok40=0;
00AE 20922300 sts _rsok40,R2
00B2 ; rscnt01=0;
00B2 20922A00 sts _rscnt01,R2
00B6 ; rscnt11=0;
00B6 20922D00 sts _rscnt11,R2
00BA ; rscnt12=0x00;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -