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

📄 uart.lis

📁 电机控制程,用于电机控制,可用于需要的系统中
💻 LIS
字号:
                        .module uart.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\NEWWOR~1\motor\uart.c
 0000                   .dbfunc e baudselect _baudselect fi
 0000           ;       bauddata -> R20,R21
 0000           ;           baud -> R16,R17
                        .even
 0000           _baudselect::
 0000 0E940000          xcall push_gset1
 0004                   .dbline -1
 0004                   .dbline 6
 0004           ; #include <iom64v.h>
 0004           ; #include <macros.h>
 0004           ; #include "head.h"
 0004           ; 
 0004           ; uint baudselect(uint baud)//baud的选择
 0004           ; {
 0004                   .dbline 7
 0004           ;  uint bauddata=0;
 0004 4427              clr R20
 0006 5527              clr R21
 0008                   .dbline 8
 0008           ;  if(baud==9600) bauddata=0x47;       //baud=9600
 0008 0038              cpi R16,128
 000A E5E2              ldi R30,37
 000C 1E07              cpc R17,R30
 000E 11F4              brne L2
 0010                   .dbline 8
 0010 47E4              ldi R20,71
 0012 0DC0              xjmp L3
 0014           L2:
 0014                   .dbline 9
 0014           ;  else if(baud==19200) bauddata=0x23;  //baud=19200
 0014 0030              cpi R16,0
 0016 EBE4              ldi R30,75
 0018 1E07              cpc R17,R30
 001A 19F4              brne L4
 001C                   .dbline 9
 001C 43E2              ldi R20,35
 001E 50E0              ldi R21,0
 0020 06C0              xjmp L5
 0022           L4:
 0022                   .dbline 10
 0022           ;  else if(baud==57600) bauddata=0x0B;  //baud=57600
 0022 0030              cpi R16,0
 0024 E1EE              ldi R30,225
 0026 1E07              cpc R17,R30
 0028 11F4              brne L6
 002A                   .dbline 10
 002A 4BE0              ldi R20,11
 002C 50E0              ldi R21,0
 002E           L6:
 002E           L5:
 002E           L3:
 002E                   .dbline 11
 002E           ;  return(bauddata);
 002E 8A01              movw R16,R20
 0030                   .dbline -2
 0030           L1:
 0030 0E940000          xcall pop_gset1
 0034                   .dbline 0 ; func end
 0034 0895              ret
 0036                   .dbsym r bauddata 20 i
 0036                   .dbsym r baud 16 i
 0036                   .dbend
 0036                   .dbfunc e Uart1Init _Uart1Init fV
 0036           ;           baud -> R20,R21
                        .even
 0036           _Uart1Init::
 0036 0E940000          xcall push_gset1
 003A A801              movw R20,R16
 003C                   .dbline -1
 003C                   .dbline 14
 003C           ; }
 003C           ; void Uart1Init(uint baud)
 003C           ; {
 003C                   .dbline 15
 003C           ;  CLI(); //disable all interrupts
 003C F894              cli
 003E                   .dbline 16
 003E           ;  UCSR1B = 0x00; //disable while setting baud rate
 003E 2224              clr R2
 0040 20929A00          sts 154,R2
 0044                   .dbline 17
 0044           ;  UCSR1A=0x00;
 0044 20929B00          sts 155,R2
 0048                   .dbline 18
 0048           ;  UBRR1H=((baudselect(baud))>>8)&0x00ff;
 0048 8A01              movw R16,R20
 004A DADF              xcall _baudselect
 004C C801              movw R24,R16
 004E 892F              mov R24,R25
 0050 9927              clr R25
 0052 9070              andi R25,0
 0054 80939800          sts 152,R24
 0058                   .dbline 19
 0058           ;  UBRR1L=(baudselect(baud))&0x00ff;
 0058 8A01              movw R16,R20
 005A D2DF              xcall _baudselect
 005C C801              movw R24,R16
 005E 9070              andi R25,0
 0060 80939900          sts 153,R24
 0064                   .dbline 20
 0064           ;  UCSR1B=(1<<RXCIE1)|(1<<RXEN1)|(1<<TXEN1);//接收器与发送器使能
 0064 88E9              ldi R24,152
 0066 80939A00          sts 154,R24
 006A                   .dbline 21
 006A           ;  UCSR1C=(3<<UCSZ10);//设计浈格式:8位数据位,1位停止位,无效验位,异步模式
 006A 86E0              ldi R24,6
 006C 80939D00          sts 157,R24
 0070                   .dbline 22
 0070           ;  SEI(); //re-enable interrupts
 0070 7894              sei
 0072                   .dbline -2
 0072           L8:
 0072 0E940000          xcall pop_gset1
 0076                   .dbline 0 ; func end
 0076 0895              ret
 0078                   .dbsym r baud 20 i
 0078                   .dbend
 0078                   .dbfunc e USART_Transmit_byte _USART_Transmit_byte fV
 0078           ;       bytedata -> R16
                        .even
 0078           _USART_Transmit_byte::
 0078                   .dbline -1
 0078                   .dbline 26
 0078           ; } 
 0078           ; 
 0078           ; void USART_Transmit_byte(uchar bytedata)
 0078           ; {
 0078           L10:
 0078                   .dbline 27
 0078           L11:
 0078                   .dbline 27
 0078           ;  while(!(UCSR1A&(1<<UDRE1)));
 0078 20909B00          lds R2,155
 007C 25FE              sbrs R2,5
 007E FCCF              rjmp L10
 0080                   .dbline 28
 0080           ;       UDR1=bytedata;
 0080 00939C00          sts 156,R16
 0084                   .dbline -2
 0084           L9:
 0084                   .dbline 0 ; func end
 0084 0895              ret
 0086                   .dbsym r bytedata 16 c
 0086                   .dbend
 0086                   .dbfunc e USART_Transmit_arraydata _USART_Transmit_arraydata fV
 0086           ;              i -> R20
 0086           ;      arraydata -> R22,R23
 0086           ;         lenght -> R10
                        .even
 0086           _USART_Transmit_arraydata::
 0086 0E940000          xcall push_gset3
 008A B901              movw R22,R18
 008C A02E              mov R10,R16
 008E                   .dbline -1
 008E                   .dbline 34
 008E           ; }
 008E           ; 
 008E           ; /***send array_byte data**********/
 008E           ; 
 008E           ; void USART_Transmit_arraydata(uchar lenght,uchar arraydata[])
 008E           ; {
 008E                   .dbline 36
 008E           ;  uchar i;
 008E           ;  for(i=0;i<lenght;i++)
 008E 4427              clr R20
 0090 07C0              xjmp L17
 0092           L14:
 0092                   .dbline 37
 0092 E42F              mov R30,R20
 0094 FF27              clr R31
 0096 E60F              add R30,R22
 0098 F71F              adc R31,R23
 009A 0081              ldd R16,z+0
 009C EDDF              xcall _USART_Transmit_byte
 009E           L15:
 009E                   .dbline 36
 009E 4395              inc R20
 00A0           L17:
 00A0                   .dbline 36
 00A0 4A15              cp R20,R10
 00A2 B8F3              brlo L14
 00A4                   .dbline -2
 00A4           L13:
 00A4 0E940000          xcall pop_gset3
 00A8                   .dbline 0 ; func end
 00A8 0895              ret
 00AA                   .dbsym r i 20 c
 00AA                   .dbsym r arraydata 22 pc
 00AA                   .dbsym r lenght 10 c
 00AA                   .dbend
 00AA                   .dbfunc e USART_Flush _USART_Flush fc
 00AA           ;          dummy -> R16
                        .even
 00AA           _USART_Flush::
 00AA                   .dbline -1
 00AA                   .dbline 41
 00AA           ;               USART_Transmit_byte(arraydata[i]);
 00AA           ; }
 00AA           ; 
 00AA           ; uchar USART_Flush( void ) 
 00AA           ; { 
 00AA 02C0              xjmp L20
 00AC           L19:
 00AC                   .dbline 43
 00AC 00919C00          lds R16,156
 00B0           L20:
 00B0                   .dbline 43
 00B0           ; unsigned char dummy; 
 00B0           ; while ( UCSR1A & (1<<RXC1) ) dummy = UDR1;        //读UDR会使RXC清零 ]
 00B0 20909B00          lds R2,155
 00B4 27FC              sbrc R2,7
 00B6 FACF              rjmp L19
 00B8                   .dbline 44
 00B8           ; return dummy;
 00B8                   .dbline -2
 00B8           L18:
 00B8                   .dbline 0 ; func end
 00B8 0895              ret
 00BA                   .dbsym r dummy 16 c
 00BA                   .dbend
                        .area vector(rom, abs)
                        .org 120
 0078 0C945D00          jmp _uart1_rx_isr
                        .area text(rom, con, rel)
 00BA                   .dbfile D:\NEWWOR~1\motor\uart.c
 00BA                   .dbfunc e uart1_rx_isr _uart1_rx_isr fV
                        .even
 00BA           _uart1_rx_isr::
 00BA                   .dbline -1
 00BA                   .dbline 51
 00BA           ; } 
 00BA           ; 
 00BA           ; /*interrupt process***************/
 00BA           ; 
 00BA           ; #pragma interrupt_handler uart1_rx_isr:31
 00BA           ; void uart1_rx_isr(void) //uart has received a character in UDR
 00BA           ; {
 00BA                   .dbline -2
 00BA           L22:
 00BA                   .dbline 0 ; func end
 00BA 1895              reti
 00BC                   .dbend

⌨️ 快捷键说明

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