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

📄 uart.lst

📁 cc1020 串口通讯
💻 LST
📖 第 1 页 / 共 5 页
字号:
__start:
__text_start:
    0025 E5CF      LDI	R28,0x5F
    0026 E0D4      LDI	R29,4
    0027 BFCD      OUT	0x3D,R28
    0028 BFDE      OUT	0x3E,R29
    0029 51C0      SUBI	R28,0x10
    002A 40D0      SBCI	R29,0
    002B EA0A      LDI	R16,0xAA
    002C 8308      STD	Y+0,R16
    002D 2400      CLR	R0
    002E E6E3      LDI	R30,0x63
    002F E0F0      LDI	R31,0
    0030 E010      LDI	R17,0
    0031 3CE8      CPI	R30,0xC8
    0032 07F1      CPC	R31,R17
    0033 F011      BEQ	0x0036
    0034 9201      ST	R0,Z+
    0035 CFFB      RJMP	0x0031
    0036 8300      STD	Z+0,R16
    0037 E4E6      LDI	R30,0x46
    0038 E0F0      LDI	R31,0
    0039 E6A0      LDI	R26,0x60
    003A E0B0      LDI	R27,0
    003B E010      LDI	R17,0
    003C 34E9      CPI	R30,0x49
    003D 07F1      CPC	R31,R17
    003E F021      BEQ	0x0043
    003F 95C8      LPM
    0040 9631      ADIW	R30,1
    0041 920D      ST	R0,X+
    0042 CFF9      RJMP	0x003C
    0043 D568      RCALL	_main
_exit:
    0044 CFFF      RJMP	_exit
FILE: C:\mk8\uart\uart.c
(0001) #include <iom8v.h>
(0002) #include "Includes.h"
(0003) #include"uart.h"
(0004) #define fosc 8000000 //晶振8.0000MHZ
(0005) #define baud 4800	 //波特率
(0006) #define maxdata 20000  //采集的最大数值
(0007) #define voltagedata		0x01	//电压伏值 3个字节
(0008) #define currentdata		0x02	//电流伏值 3个字节
(0009) #define entercomm		0x56    //确认帧 0字节
(0010) 
(0011) #define addressper		0x10	//本机地址
(0012) // LOCK status definitions
(0013) #define  LOCK_NOK         0x00
(0014) #define  LOCK_OK          0x01
(0015) #define  LOCK_RECAL_OK    0x02
(0016) #define uchar			unsigned char
(0017) // Maximum number of re-calibration attempts upon calibration failure
(0018) #define CAL_ATTEMPT_MAX   4
(0019) // Time-out values
(0020) #define CAL_TIMEOUT    0x7FFE
(0021) #define LOCK_TIMEOUT   0x7FFE
(0022) const unsigned char DefaultConfig433[32] =
(0023) {
(0024)   0x0F,  // 0x01, INTERFACE
(0025)   0xFF,  // 0x02, RESET
(0026)   0x8F,  // 0x03, SEQUENCING
(0027) 
(0028)   0x3A,  // 0x04, FREQ_2A
(0029)   0x10,  // 0x05, FREQ_1A
(0030)   0x01, // 0x06, FREQ_0A
(0031)   0x39,  // 0x0B, CLOCK_A 19.2K
(0032) 
(0033)   0x3A,  // 0x08, FREQ_2B
(0034)   0x1A,  // 0x09, FREQ_1B
(0035)   0xAB,  // 0x0A, FREQ_0B
(0036)   0x39,  // 0x0B, CLOCK_A 19.2K
(0037)   0x44,  // 0x0C, VCO
(0038)   0x50,  // 0x0D, MODEM
(0039)   0xbb, // 0x0E, DEVIATION
(0040)   0x46,  // 0x0F, AFC_CONTROL
(0041)   0x25,  // 0x10, FILTER
(0042)   0x61,  // 0x11, VGA1
(0043)   0x55,  // 0x12, VGA2
(0044)   0x2d,  // 0x13, VGA3
(0045)   0x29, // 0x14, VGA4
(0046)   0x20,  // 0x15, LOCK
(0047)   0x78,  // 0x16, FRONTEND
(0048)   0x47,  // 0x17, ANALOG, RX=47/TX=47
(0049)   0x14,  // 0x18, BUFF_SWING
(0050)   0x22,  // 0x19, BUFF_CURRENT
(0051)   0xAE,  // 0x1A, PLL_BW
_Initial:
    0045 2422      CLR	R2
    0046 9220007D  STS	Rx_Time,R2
(0052)   0x34,  // 0x1B, CALIBRATE
    0048 9508      RET
_watchdog_init:
    0049 95A8      WDR
    004A E08F      LDI	R24,0xF
(0053)   0x0f, // 0x1C, PA_POWER
    004B BD81      OUT	0x21,R24
    004C 9508      RET
(0054)   0x00,  // 0x1D, MATCH
(0055)   0x00,  // 0x1E, PHASE_COMP
_putchar:
  c                    --> R16
    004D 9B5D      SBIS	0x0B,5
    004E CFFE      RJMP	_putchar
    004F B90C      OUT	0x0C,R16
(0056)   0x00,  // 0x1F, GAIN_COMP
(0057)   0x00   // 0x20, POWERDOWN
(0058)  };
(0059) unsigned char boolval,retrn_val,looptmp;
(0060) char bool_val;
(0061) char PA_POWER=0xF0;
(0062) char RXANALOG=0x47;
(0063) char TXANALOG=0x47;	
    0050 9508      RET
(0064) uchar rcv1[50];
_timer0_init:
    0051 2422      CLR	R2
    0052 BE23      OUT	0x33,R2
    0053 E781      LDI	R24,0x71
(0065) uchar rcvd1,rscnt11,rscnt12,rscnt13,rscnt01,xx0,xx1;
(0066) 
(0067) uchar rsok00,rsok10,rsok20,rsok30,rsok40;
(0068) //extern unsigned char read_flash(unsigned int add);
(0069) uchar w1;
(0070) uchar databak[3],datawn2[3];
(0071) 
    0054 BF82      OUT	0x32,R24
    0055 E084      LDI	R24,4
(0072) /* 串口通讯变量定义 */
    0056 BF83      OUT	0x33,R24
    0057 9508      RET
(0073) 
(0074) uchar Tx_Rx,Rx_Time;
(0075) 
(0076) /*--------------------------------------------------------------------------------------------------
(0077)                                             变量定义
(0078) --------------------------------------------------------------------------------------------------*/ 
(0079) 
(0080) //********量程切换********//
(0081) INT8U  	Rx_Time;                       		// 通讯间隔时间
_timer0_ovf_isr:
    0058 938A      ST	R24,-Y
    0059 B78F      IN	R24,0x3F
(0082) 
    005A 938A      ST	R24,-Y
    005B E781      LDI	R24,0x71
(0083) /* 数字滤波 */
    005C BF82      OUT	0x32,R24
    005D 95A8      WDR
    005E 9189      LD	R24,Y+
    005F BF8F      OUT	0x3F,R24
    0060 9189      LD	R24,Y+
(0084) INT16U Vwn_Buf[13];
(0085) /*--------------------------------------------------------------------------------------------------
(0086)                                             函数定义
(0087) --------------------------------------------------------------------------------------------------*/ 
(0088) void Initial ( void )
(0089) {	
(0090)   Rx_Time    	= 0;// 通讯间隔时间
    0061 9518      RETI
_timer1_init:
    0062 2422      CLR	R2
(0091) }
(0092) 
    0063 BC2E      OUT	0x2E,R2
    0064 BC2D      OUT	0x2D,R2
    0065 BC2C      OUT	0x2C,R2
    0066 BC2B      OUT	0x2B,R2
    0067 BC2A      OUT	0x2A,R2
(0093) 
(0094) //Watchdog initialize
(0095) // prescale: 2048K
(0096) void watchdog_init(void)
(0097) {
(0098)  	WDR(); //this prevents a timout on enabling
(0099)  	WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
(0100) }
(0101) 
    0068 BC29      OUT	0x29,R2
    0069 BC28      OUT	0x28,R2
(0102) 
    006A BC27      OUT	0x27,R2
(0103) /*  		字符输出函数 		 */
    006B BC26      OUT	0x26,R2
(0104) void putchar(uchar c)
    006C BC2F      OUT	0x2F,R2
(0105) {	 
    006D E086      LDI	R24,6
(0106)      while (!(UCSRA&(1<<UDRE)));
    006E BD8E      OUT	0x2E,R24
(0107) 	 UDR=c;    
    006F 9508      RET
(0108) }
_timer2_init:
    0070 2422      CLR	R2
(0109) 
    0071 BC25      OUT	0x25,R2
(0110) 
    0072 BC22      OUT	0x22,R2
(0111) //TIMER0 initialize - prescale:256
    0073 E18A      LDI	R24,0x1A
    0074 BD84      OUT	0x24,R24
    0075 EE86      LDI	R24,0xE6
(0112) // desired value: 5mSec
(0113) // actual value:  4.965mSec (0.7%)
(0114) void timer0_init(void)
(0115) {
(0116)  	TCCR0 = 0x00; //stop
(0117)  	TCNT0 = 0x71; //set count
(0118)  	TCCR0 = 0x04; //start timer
(0119) }
(0120) 
    0076 BD83      OUT	0x23,R24
    0077 E083      LDI	R24,3
(0121) 
    0078 BD85      OUT	0x25,R24
(0122) #pragma interrupt_handler timer0_ovf_isr:10
    0079 9508      RET
_timer2_ovf_isr:
    007A 922A      ST	R2,-Y
(0123) void timer0_ovf_isr(void)
    007B 938A      ST	R24,-Y
    007C 939A      ST	R25,-Y
(0124) {
    007D B62F      IN	R2,0x3F
    007E 922A      ST	R2,-Y
    007F E18A      LDI	R24,0x1A
    0080 BD84      OUT	0x24,R24
    0081 9020007E  LDS	R2,Tx_Rx
    0083 2022      TST	R2
    0084 F509      BNE	0x00A6
    0085 9180007D  LDS	R24,Rx_Time
(0125) 	TCNT0 = 0x71; 	//reload counter value
(0126) 	//AD转换 		
(0127) 	WDR();// 喂狗                
(0128)  	
(0129) }
(0130) 
    0087 5F8F      SUBI	R24,0xFF
(0131) //TIMER1 initialize - prescale:Rising edge
(0132) // WGM: 0) Normal, TOP=0xFFFF
(0133) // desired value: 1Hz
    0088 2E28      MOV	R2,R24
    0089 9220007D  STS	Rx_Time,R2
    008B E288      LDI	R24,0x28
(0134) // actual value: Out of range
(0135) void timer1_init(void)
    008C 1582      CP	R24,R2
    008D F4C0      BCC	0x00A6
    008E E082      LDI	R24,2
    008F 9380007E  STS	Tx_Rx,R24
(0136) {
(0137)  	TCCR1B = 0x00; //stop
(0138)  	TCNT1H = 0x00 /*INVALID SETTING*/; //setup
    0091 2422      CLR	R2
    0092 9220007D  STS	Rx_Time,R2
    0094 9220008A  STS	rsok00,R2
    0096 92200089  STS	rsok10,R2
(0139)  	TCNT1L = 0x00 /*INVALID SETTING*/;
(0140)  	OCR1AH = 0x00 /*INVALID SETTING*/;
    0098 92200088  STS	rsok20,R2
    009A 92200087  STS	rsok30,R2
    009C 92200086  STS	rsok40,R2
    009E 9220008D  STS	rscnt01,R2
    00A0 92200090  STS	rscnt11,R2
    00A2 9220008F  STS	rscnt12,R2
    00A4 9220008E  STS	rscnt13,R2
    00A6 9029      LD	R2,Y+
(0141)  	OCR1AL = 0x00 /*INVALID SETTING*/;
(0142)  	OCR1BH = 0x00 /*INVALID SETTING*/;
    00A7 BE2F      OUT	0x3F,R2
    00A8 9199      LD	R25,Y+
    00A9 9189      LD	R24,Y+
(0143)  	OCR1BL = 0x00 /*INVALID SETTING*/;
    00AA 9029      LD	R2,Y+
    00AB 9518      RETI
(0144)  	ICR1H  = 0x00 /*INVALID SETTING*/;
(0145)  	ICR1L  = 0x00 /*INVALID SETTING*/;
(0146)  	TCCR1A = 0x00;
(0147)  	TCCR1B = 0x06; //start Timer
_int1_isr:
    00AC 9518      RETI
_init_devices:
    00AD 94F8      BCLR	7
    00AE DF9A      RCALL	_watchdog_init
    00AF DFA1      RCALL	_timer0_init
    00B0 DFB1      RCALL	_timer1_init
    00B1 DFBE      RCALL	_timer2_init
    00B2 E088      LDI	R24,0x8
    00B3 BF85      OUT	0x35,R24
(0148) }
(0149) 
    00B4 E880      LDI	R24,0x80
    00B5 BF8B      OUT	0x3B,R24
    00B6 E481      LDI	R24,0x41
    00B7 BF89      OUT	0x39,R24
    00B8 9478      BSET	7
    00B9 9508      RET
_uart0_rx_isr:
    00BA 922A      ST	R2,-Y
    00BB 923A      ST	R3,-Y
    00BC 938A      ST	R24,-Y
(0150) //TIMER2 initialize - prescale:32
(0151) // WGM: Normal
(0152) // desired value: 1mSec
    00BD 939A      ST	R25,-Y
    00BE 93EA      ST	R30,-Y
(0153) // actual value:  0.998mSec (0.2%)
(0154) void timer2_init(void)
    00BF 93FA      ST	R31,-Y
    00C0 B62F      IN	R2,0x3F
    00C1 922A      ST	R2,-Y
(0155) {
    00C2 995F      SBIC	0x0B,7
(0156)  	TCCR2 = 0x00; //stop
    00C3 C001      RJMP	0x00C5
(0157)  	ASSR  = 0x00; //set async mode
    00C4 C0D2      RJMP	0x0197
    00C5 9020008A  LDS	R2,rsok00
    00C7 2022      TST	R2
    00C8 F531      BNE	0x00EF
    00C9 B02C      IN	R2,0x0C
    00CA 92200091  STS	rcvd1,R2
    00CC 2D82      MOV	R24,R2
(0158)  	TCNT2 = 0x1A; //setup
(0159)  	OCR2  = 0xE6;
    00CD 3585      CPI	R24,0x55
    00CE F431      BNE	0x00D5
    00CF 9180008D  LDS	R24,rscnt01
(0160)  	TCCR2 = 0x03; //start
    00D1 5F8F      SUBI	R24,0xFF
    00D2 9380008D  STS	rscnt01,R24
    00D4 C009      RJMP	0x00DE
    00D5 91800091  LDS	R24,rcvd1
    00D7 3A8A      CPI	R24,0xAA
    00D8 F429      BNE	0x00DE
    00D9 9180008D  LDS	R24,rscnt01
(0161) }
(0162) 
(0163) #pragma interrupt_handler timer2_ovf_isr:5
(0164) void timer2_ovf_isr(void)
(0165) {
(0166)  	TCNT2 = 0x1A; //reload counter value
(0167) 
(0168) 	/* 通讯数据间隔判断*/
(0169) 
(0170) 	if(Tx_Rx == 0)			// 通讯
(0171) 	{
(0172)     	if(++Rx_Time > 40)					// 间隔时间大于40ms后判断为接收超时
(0173)         {
(0174)             	Tx_Rx       = 2;			// 接收结束;
(0175)             	Rx_Time     = 0;
(0176) 				rsok00=0;
(0177) 				rsok10=0;
(0178) 				rsok20=0;
(0179) 				rsok30=0;
(0180) 				rsok40=0;
(0181) 				rscnt01=0;
(0182) 				rscnt11=0;	
(0183) 				rscnt12=0x00;
(0184)  				rscnt13=0x00;
(0185)         }
(0186)        	else
(0187)     	{}
(0188) 	}
(0189) 
(0190) }
    00DB 5F8F      SUBI	R24,0xFF
    00DC 9380008D  STS	rscnt01,R24
    00DE 91800091  LDS	R24,rcvd1
    00E0 3A8A      CPI	R24,0xAA
    00E1 F009      BEQ	0x00E3
    00E2 C0B4      RJMP	0x0197
    00E3 9180008D  LDS	R24,rscnt01
(0191) 
(0192) 
    00E5 3081      CPI	R24,1
    00E6 F408      BCC	0x00E8
    00E7 C0AF      RJMP	0x0197
(0193) #pragma interrupt_handler int1_isr:3
(0194) void int1_isr(void)
    00E8 E081      LDI	R24,1
    00E9 9380008A  STS	rsok00,R24
    00EB 2422      CLR	R2
(0195) {
(0196)  	 //external interupt on INT1
(0197) }
(0198) 
(0199) //call this routine to initialize all peripherals
(0200) void init_devices(void)
(0201) {
    00EC 9220008D  STS	rscnt01,R2
(0202)  	//stop errant interrupts until set up
    00EE C0A8      RJMP	0x0197
(0203)  	CLI(); //disable all interrupts
(0204) 	watchdog_init();
    00EF 90200089  LDS	R2,rsok10
(0205)  	timer0_init();
    00F1 2022      TST	R2
    00F2 F541      BNE	0x011B
(0206)  	timer1_init();
(0207) 	timer2_init();
    00F3 B02C      IN	R2,0x0C
    00F4 92200090  STS	rscnt11,R2
(0208)  	MCUCR  = 0x08;	//INT1的下降沿产生中断
    00F6 2D82      MOV	R24,R2
(0209)  	GICR   = 0x80;	//BOOT区起始地址
    00F7 3180      CPI	R24,0x10
    00F8 F4F1      BNE	0x0117
    00F9 E081      LDI	R24,1
    00FA 93800089  STS	rsok10,R24
    00FC 2422      CLR	R2
    00FD 9220008C  STS	xx0,R2
    00FF 9220008B  STS	xx1,R2
(0210)  	TIMSK  = 0x41; //timer interrupt sources
(0211)  	SEI(); //re-enable interrupts
(0212)  	//all peripherals are now initialized
(0213) }
(0214) 
(0215) 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -