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

📄 uart.lis

📁 cc1020 串口通讯
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .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 + -