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

📄 lesson10.lst

📁 用TMS320F2808芯片
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
      1B EFCF      LDI	R28,0xFF
      1C E0D4      LDI	R29,4
      1D BFCD      OUT	0x3D,R28
      1E BFDE      OUT	0x3E,R29
      1F 51C0      SUBI	R28,0x10
      20 40D0      SBCI	R29,0
      21 EA0A      LDI	R16,0xAA
      22 8308      STD	Y+0,R16
      23 2400      CLR	R0
      24 E0E2      LDI	R30,2
      25 E0F1      LDI	R31,1
      26 E011      LDI	R17,1
      27 32E3      CPI	R30,0x23
      28 07F1      CPC	R31,R17
      29 F011      BEQ	0x002C
      2A 9201      ST	R0,Z+
      2B CFFB      RJMP	0x0027
      2C 8300      STD	Z+0,R16
      2D E3E4      LDI	R30,0x34
      2E E0F0      LDI	R31,0
      2F E0A0      LDI	R26,0
      30 E0B1      LDI	R27,1
      31 E010      LDI	R17,0
      32 E000      LDI	R16,0
      33 BF0B      OUT	0x3B,R16
      34 33E6      CPI	R30,0x36
      35 07F1      CPC	R31,R17
      36 F021      BEQ	0x003B
      37 95C8      LPM
      38 9631      ADIW	R30,1
      39 920D      ST	R0,X+
      3A CFF9      RJMP	0x0034
      3B D076      RCALL	_main
_exit:
      3C CFFF      RJMP	_exit
_delay:
  i                    --> R20
  j                    --> R22
  ms                   --> R16
      3D D167      RCALL	push_xgsetF000
FILE: C:\DOCUME~1\zhanghanyu\桌面\ICC\chengxu10\lesson10\lesson10.c
(0001) #include <iom88v.h>
(0002) #include <macros.h>
(0003) #define  uchar unsigned char
(0004) #define  uint  unsigned int
(0005) 
(0006) //晶振 7.3728MHZ
(0007) #define  mclk   7372800	   
(0008) // #pragma interrupt_handler uart_rx:12
(0009) #pragma interrupt_handler uart_rx:iv_USART0_RXC
(0010) uchar rdata,flag=0;
(0011) uchar Rec_Data[27];
(0012) uchar Data_Len =0,i;
(0013) uchar adcL,adcH;
(0014) uint  adresult;
(0015) void delay(uint ms)	//延时函数
(0016) {
(0017)         uint i,j;
(0018) 	for(i=0;i<ms;i++)
      3E 2744      CLR	R20
      3F 2755      CLR	R21
      40 C00B      RJMP	0x004C
(0019) 	   {
(0020) 	   for(j=0;j<1100;j++);
      41 2766      CLR	R22
      42 2777      CLR	R23
      43 C002      RJMP	0x0046
      44 5F6F      SUBI	R22,0xFF
      45 4F7F      SBCI	R23,0xFF
      46 346C      CPI	R22,0x4C
      47 E0E4      LDI	R30,4
      48 077E      CPC	R23,R30
      49 F3D0      BCS	0x0044
      4A 5F4F      SUBI	R20,0xFF
      4B 4F5F      SBCI	R21,0xFF
      4C 1740      CP	R20,R16
      4D 0751      CPC	R21,R17
      4E F390      BCS	0x0041
      4F C15A      RJMP	pop_xgsetF000
_uart_init:
  baud                 --> R10
      50 D15E      RCALL	push_xgsetF00C
      51 0158      MOVW	R10,R16
(0021)        }
(0022) } 
(0023) 
(0024) //0D 0A 3E 0D 0A 52 65 61 64 20 46 77 64 20 33 3E 0D 0A 20 39 33 31 36 37 3F 20 20
(0025) //0D 0A 3E 0D 0A 52 65 61 64 20 46 6C 6F 77 20 31 3E 0D 0A 20 35 34 2E 39 32 30 3F 20 20
(0026) void uart_init(uint baud)	//串口初始化
(0027) {
(0028) 
(0029)     UCSR0B=0x00; 
      52 2422      CLR	R2
      53 9220 00C1 STS	0x00C1,R2
(0030)    UCSR0A=0x00; 		    //控制寄存器清零
      55 9220 00C0 STS	0x00C0,R2
(0031)    UCSR0C=(1<<UCSZ01)|(1<<UCSZ00);   
      57 E086      LDI	R24,6
      58 9380 00C2 STS	0x00C2,R24
(0032)                                                         //选择UCSRC,异步模式,禁止                        
(0033)                                                      //   校验,1位停止位,8位数据位
(0034)    baud=mclk/16/baud-1	;   //波特率最大为65K
      5A 0115      MOVW	R2,R10
      5B 2444      CLR	R4
      5C 2455      CLR	R5
      5D E040      LDI	R20,0
      5E E058      LDI	R21,0x8
      5F E067      LDI	R22,7
      60 E070      LDI	R23,0
      61 925A      ST	R5,-Y
      62 924A      ST	R4,-Y
      63 923A      ST	R3,-Y
      64 922A      ST	R2,-Y
      65 018A      MOVW	R16,R20
      66 019B      MOVW	R18,R22
      67 D0DB      RCALL	div32s
      68 E041      LDI	R20,1
      69 E050      LDI	R21,0
      6A E060      LDI	R22,0
      6B E070      LDI	R23,0
      6C 0118      MOVW	R2,R16
      6D 0129      MOVW	R4,R18
      6E 1A24      SUB	R2,R20
      6F 0A35      SBC	R3,R21
      70 0A46      SBC	R4,R22
      71 0A57      SBC	R5,R23
      72 0151      MOVW	R10,R2
(0035)    UBRR0L=baud; 					     	  
      73 92A0 00C4 STS	0x00C4,R10
(0036)    UBRR0H=baud>>8; 		   //设置波特率
      75 2C23      MOV	R2,R3
      76 2433      CLR	R3
      77 9220 00C5 STS	0x00C5,R2
(0037)    UCSR0B=(1<<TXEN0)|(1<<RXEN0)|(1<<RXCIE0); 
      79 E988      LDI	R24,0x98
      7A 9380 00C1 STS	0x00C1,R24
(0038)                                                        //接收、发送使能,接收中断使能
(0039)    SREG=BIT(7);	                //全局中断开放
      7C E880      LDI	R24,0x80
      7D BF8F      OUT	0x3F,R24
(0040)    DDRD|=0X02;	                //配置TX为输出(很重要)
      7E 9A51      SBI	0x0A,1
      7F C136      RJMP	pop_xgsetF00C
(0041) 
(0042) }
(0043) 
(0044) void adc_init(void)
(0045) {
(0046)  ADCSRA = 0x00; //disable adc
_adc_init:
      80 2422      CLR	R2
      81 9220 007A STS	0x007A,R2
      83 9508      RET
(0047)  //ADMUX = 0x46;  //选择AVCC为参考,采集电压右对齐,1110 1.1V
(0048) }
(0049) void uart_sendB(uchar data)	//发送字符
(0050) {
(0051)    while(!(UCSR0A&(BIT(UDRE0)))) ;
_uart_sendB:
  data                 --> R16
      84 9020 00C0 LDS	R2,0x00C0
      86 FE25      SBRS	R2,5
      87 CFFC      RJMP	_uart_sendB
(0052)    UDR0=data;
      88 9300 00C6 STS	0x00C6,R16
(0053)    while(!(UCSR0A&(BIT(TXC0))));
      8A 9020 00C0 LDS	R2,0x00C0
      8C FE26      SBRS	R2,6
      8D CFFC      RJMP	0x008A
(0054)    UCSR0A|=BIT(TXC0);
      8E 9180 00C0 LDS	R24,0x00C0
      90 6480      ORI	R24,0x40
      91 9380 00C0 STS	0x00C0,R24
      93 9508      RET
_uart_rx:
      94 922A      ST	R2,-Y
      95 938A      ST	R24,-Y
      96 939A      ST	R25,-Y
      97 B62F      IN	R2,0x3F
      98 922A      ST	R2,-Y
(0055) }
(0056) void uart_rx()			//接收字符
(0057) {
(0058)     UCSR0B&=~BIT(RXCIE0);
      99 9180 00C1 LDS	R24,0x00C1
      9B 778F      ANDI	R24,0x7F
      9C 9380 00C1 STS	0x00C1,R24
(0059) 	rdata=UDR0;
      9E 9020 00C6 LDS	R2,0x00C6
      A0 9220 0122 STS	rdata,R2
(0060) 	//flag=1;
(0061) 	Data_Len++;
      A2 9180 0101 LDS	R24,Data_Len
      A4 5F8F      SUBI	R24,0xFF
      A5 9380 0101 STS	Data_Len,R24
(0062) 	UCSR0B|=BIT(RXCIE0);
      A7 9180 00C1 LDS	R24,0x00C1
      A9 6880      ORI	R24,0x80
      AA 9380 00C1 STS	0x00C1,R24
      AC 9029      LD	R2,Y+
      AD BE2F      OUT	0x3F,R2
      AE 9199      LD	R25,Y+
      AF 9189      LD	R24,Y+
      B0 9029      LD	R2,Y+
      B1 9518      RETI
(0063) }
(0064) void main()
(0065) {
(0066)     //uchar i=4;
(0067) 	//uchar j='a';
(0068)     uart_init(4800);	//初始化串口
_main:
      B2 EC00      LDI	R16,0xC0
      B3 E112      LDI	R17,0x12
      B4 DF9B      RCALL	_uart_init
(0069) 
(0070) 	adc_init();			//初始化ADC
      B5 DFCA      RCALL	_adc_init
      B6 C084      RJMP	0x013B
(0071) 	
(0072) 	while(1)
(0073) 	{
(0074) 	
(0075) 	   if(rdata==0xaa)	//开始ADC转换标志
      B7 9180 0122 LDS	R24,rdata
      B9 3A8A      CPI	R24,0xAA
      BA F009      BEQ	0x00BC
      BB C07F      RJMP	0x013B
(0076) 	   {
(0077) 	   	  rdata=0x00;
      BC 2422      CLR	R2
      BD 9220 0122 STS	rdata,R2
(0078) 		  //****************************************************
(0079) 		  ADMUX = 0x46;  //选择AVCC为参考,采集电压右对齐 6通道
      BF E486      LDI	R24,0x46
      C0 9380 007C STS	0x007C,R24
(0080) 		  //delay(100);
(0081) 		  ADCSRA =0x84; //0b11000100	 8分频
      C2 E884      LDI	R24,0x84
      C3 9380 007A STS	0x007A,R24
(0082) 		  ADCSRA |=BIT(ADSC);			 //开始转换
      C5 9180 007A LDS	R24,0x007A
      C7 6480      ORI	R24,0x40
      C8 9380 007A STS	0x007A,R24
(0083) 		  
(0084) 		  while(!(ADCSRA&(1<<ADIF)));
      CA 9020 007A LDS	R2,0x007A
      CC FE24      SBRS	R2,4
      CD CFFC      RJMP	0x00CA
(0085) 		  
(0086) 		  //while(ADCSRA&(1<<ADSC)); //为1等待
(0087) 		  adcL=ADCL;
      CE 9020 0078 LDS	R2,0x0078
      D0 9220 0105 STS	adcL,R2
(0088) 		  adcH=ADCH;
      D2 9020 0079 LDS	R2,0x0079
      D4 9220 0104 STS	adcH,R2
(0089) 		  ADCSRA |=BIT(1<<ADIF);
      D6 E110      LDI	R17,0x10
      D7 E001      LDI	R16,1
      D8 D0ED      RCALL	lsl8
      D9 9020 007A LDS	R2,0x007A
      DB 2A20      OR	R2,R16

⌨️ 快捷键说明

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