📄 main.lis
字号:
.module main.c
.area vector(rom, abs)
.org 8
0008 0C946401 jmp _INT1_17
.org 36
0024 0C940402 jmp _Timer0
.org 44
002C 0C94DC01 jmp _Usart_receive
.area data(ram, con, rel)
0000 _can_boud::
0000 .blkb 1
.area idata
0000 07 .byte 7
.area data(ram, con, rel)
0001 .dbfile F:\小制作\can,usb,以太网学习板\232转CAN学习程序\main.c
0001 .dbsym e can_boud _can_boud c
0001 _bps::
0001 .blkb 2
.area idata
0001 0096 .word 38400
.area data(ram, con, rel)
0003 .dbfile F:\小制作\can,usb,以太网学习板\232转CAN学习程序\main.c
0003 .dbsym e bps _bps i
0003 _eflag::
0003 .blkb 1
.area idata
0003 00 .byte 0
.area data(ram, con, rel)
0004 .dbfile F:\小制作\can,usb,以太网学习板\232转CAN学习程序\main.c
0004 .dbsym e eflag _eflag c
0004 _Tdate::
0004 .blkb 1
.area idata
0004 00 .byte 0
.area data(ram, con, rel)
0005 .dbfile F:\小制作\can,usb,以太网学习板\232转CAN学习程序\main.c
0005 .blkb 9
.area idata
0005 000000000000000000 .byte 0,0,0,0,0,0,0,0,0
.area data(ram, con, rel)
000E .dbfile F:\小制作\can,usb,以太网学习板\232转CAN学习程序\main.c
000E .dbsym e Tdate _Tdate A[10:10]c
000E _TID::
000E .blkb 2
.area idata
000E 0000 .byte 0,0
.area data(ram, con, rel)
0010 .dbfile F:\小制作\can,usb,以太网学习板\232转CAN学习程序\main.c
0010 .dbsym e TID _TID A[2:2]c
0010 _Rdate::
0010 .blkb 1
.area idata
0010 00 .byte 0
.area data(ram, con, rel)
0011 .dbfile F:\小制作\can,usb,以太网学习板\232转CAN学习程序\main.c
0011 .blkb 7
.area idata
0011 00000000000000 .byte 0,0,0,0,0,0,0
.area data(ram, con, rel)
0018 .dbfile F:\小制作\can,usb,以太网学习板\232转CAN学习程序\main.c
0018 .dbsym e Rdate _Rdate A[8:8]c
0018 _usart_number::
0018 .blkb 2
.area idata
0018 0000 .word 0
.area data(ram, con, rel)
001A .dbfile F:\小制作\can,usb,以太网学习板\232转CAN学习程序\main.c
001A .dbsym e usart_number _usart_number i
001A _DLC::
001A .blkb 1
.area idata
001A 08 .byte 8
.area data(ram, con, rel)
001B .dbfile F:\小制作\can,usb,以太网学习板\232转CAN学习程序\main.c
001B .dbsym e DLC _DLC c
.area text(rom, con, rel)
0000 .dbfile F:\小制作\can,usb,以太网学习板\232转CAN学习程序\main.c
0000 .dbfunc e delay _delay fV
0000 ; i -> R20,R21
0000 ; k -> R16
.even
0000 _delay::
0000 0E940000 xcall push_gset1
0004 .dbline -1
0004 .dbline 39
0004 ; /*##############################################################################
0004 ; 功能:CAN与232相互转换
0004 ; 作者:LHF
0004 ; 时间:2007-01
0004 ; 版本:V1.0
0004 ; ################################################################################
0004 ; 资源分配: PORTC.2~5:JTAG
0004 ; ##############################################################################*/
0004 ; //##############################################################################
0004 ; #include <iom16v.h> //寄存器定义;
0004 ; #include <macros.h> //宏定义;
0004 ; #include "MCP2515.h" //2515寄存器定义
0004 ; #define uchar unsigned char //数据类型定义
0004 ; #define uint unsigned int //数据类型定义
0004 ;
0004 ; #pragma interrupt_handler INT1_17:3 //定义INT1的中断服务程序
0004 ; #pragma interrupt_handler Timer0:10 //定义定时计数器0的中断服务程序
0004 ; #pragma interrupt_handler Usart_receive:12 //定义接收中断服务程序
0004 ; #define fosc 7372800 //晶振7.3728MHZ
0004 ; uchar can_boud=0x07;//MCP2515在16M晶振情况,can_boud=0x00总线波特率为1M,0x01=500K,0x03=250K,0x07=125K;公式:16M/(16*(1+X))
0004 ; uint bps=38400;//定义串口波特率
0004 ;
0004 ; uchar eflag=0;//是不是扩展帧,为1则表示接收到的是扩展帧,0表示标准帧
0004 ; uchar Tdate[10]={0};//存放要发送标准帧的数据,最大10位,前2位是ID号,后8位是数据位
0004 ; uchar TID[2]={0,0};//存放要发送标准帧的ID号
0004 ;
0004 ; uchar Rdate[8]={0};//存放接收到的数据
0004 ; uchar RESID[4];//存放接收到的数据帧的ID号,标准帧只用到RESID[0],RESID[1],扩展帧全部用到
0004 ;
0004 ; uchar bytetime;//232与CAN透明转换时,根据不同的波特率确定所要延时的时间,
0004 ; uint usart_number=0;//计数当前所接收的串行数据的那一组数据流的数据个数,串口传来的数据存放在Tdate中等待用CAN标准帧发送
0004 ;
0004 ; uchar state;//2515状态(包括发送接收中断标志位和各请求发送位),具体见数据手册
0004 ; uchar DLC=8;//接收到数据的长度
0004 ;
0004 ; //****************************************************************************//
0004 ; //********************************延时程序************************************//
0004 ; void delay(uchar k)//
0004 ; {uint i=0;
0004 .dbline 39
0004 4427 clr R20
0006 5527 clr R21
0008 09C0 xjmp L3
000A L2:
000A .dbline 40
000A .dbline 40
000A 4427 clr R20
000C 5527 clr R21
000E 02C0 xjmp L8
0010 L5:
0010 .dbline 40
0010 L6:
0010 .dbline 40
0010 4F5F subi R20,255 ; offset = 1
0012 5F4F sbci R21,255
0014 L8:
0014 .dbline 40
0014 4034 cpi R20,64
0016 EFE1 ldi R30,31
0018 5E07 cpc R21,R30
001A D0F3 brlo L5
001C .dbline 40
001C L3:
001C .dbline 40
001C ; while(k--){for(i=0;i<8000;i++);}
001C 202E mov R2,R16
001E 3324 clr R3
0020 0150 subi R16,1
0022 2220 tst R2
0024 91F7 brne L2
0026 .dbline -2
0026 L1:
0026 0E940000 xcall pop_gset1
002A .dbline 0 ; func end
002A 0895 ret
002C .dbsym r i 20 i
002C .dbsym r k 16 c
002C .dbend
002C .dbfunc e Set_CS _Set_CS fV
002C ; level -> R16
.even
002C _Set_CS::
002C .dbline -1
002C .dbline 44
002C ; }
002C ; //##############################################################################
002C ; void Set_CS(uchar level) //
002C ; {if(level) PORTB|=0x10; //
002C .dbline 44
002C 0023 tst R16
002E 11F0 breq L10
0030 .dbline 44
0030 C49A sbi 0x18,4
0032 03C0 xjmp L11
0034 L10:
0034 .dbline 45
0034 88B3 in R24,0x18
0036 8F7E andi R24,239
0038 88BB out 0x18,R24
003A L11:
003A .dbline -2
003A L9:
003A .dbline 0 ; func end
003A 0895 ret
003C .dbsym r level 16 c
003C .dbend
003C .dbfunc e WriteSPI _WriteSPI fV
003C ; clear -> R20
003C ; order -> R20
.even
003C _WriteSPI::
003C 0E940000 xcall push_gset1
0040 402F mov R20,R16
0042 .dbline -1
0042 .dbline 51
0042 ; else PORTB&=0xef; //
0042 ; }
0042 ; //##############################################################################
0042 ; //********************************SPI对2515访问*******************************//
0042 ; //****************WriteSPI()*******************//
0042 ; void WriteSPI(uchar order)
0042 ; { uchar clear;
0042 .dbline 52
0042 ; Set_CS(0); //
0042 0027 clr R16
0044 F3DF xcall _Set_CS
0046 .dbline 53
0046 ; SPDR=order; //2515读指令为0x03
0046 4FB9 out 0xf,R20
0048 L13:
0048 .dbline 54
0048 L14:
0048 .dbline 54
0048 ; while(!(SPSR&0x80)); //等待SPIF置位,等数据发送完毕
0048 779B sbis 0xe,7
004A FECF rjmp L13
004C .dbline 55
004C ; clear=SPSR;
004C 4EB1 in R20,0xe
004E .dbline 56
004E ; clear=SPDR;//
004E 4FB1 in R20,0xf
0050 .dbline 57
0050 ; Set_CS(1); //
0050 01E0 ldi R16,1
0052 ECDF xcall _Set_CS
0054 .dbline -2
0054 L12:
0054 0E940000 xcall pop_gset1
0058 .dbline 0 ; func end
0058 0895 ret
005A .dbsym r clear 20 c
005A .dbsym r order 20 c
005A .dbend
005A .dbfunc e Read_state _Read_state fc
005A ; clear -> R20
005A ; order -> R20
.even
005A _Read_state::
005A 0E940000 xcall push_gset1
005E 402F mov R20,R16
0060 .dbline -1
0060 .dbline 62
0060 ; }
0060 ;
0060 ; //****************Read_state()*******************//
0060 ; uchar Read_state(uchar order)//读状态命令,order=0xa0,0xa1,
0060 ; { uchar clear;
0060 .dbline 63
0060 ; Set_CS(0); //
0060 0027 clr R16
0062 E4DF xcall _Set_CS
0064 .dbline 64
0064 ; SPDR=order; //
0064 4FB9 out 0xf,R20
0066 L17:
0066 .dbline 65
0066 L18:
0066 .dbline 65
0066 ; while(!(SPSR&0x80)); //等待SPIF置位,等数据发送完毕
0066 779B sbis 0xe,7
0068 FECF rjmp L17
006A .dbline 66
006A ; clear=SPSR;
006A 4EB1 in R20,0xe
006C .dbline 67
006C ; clear=SPDR;//
006C 4FB1 in R20,0xf
006E .dbline 69
006E ;
006E ; SPDR=0; //空数据
006E 2224 clr R2
0070 2FB8 out 0xf,R2
0072 L20:
0072 .dbline 70
0072 L21:
0072 .dbline 70
0072 ; while(!(SPSR&0x80));//等待SPIF置位,等数据发送完毕
0072 779B sbis 0xe,7
0074 FECF rjmp L20
0076 .dbline 71
0076 ; clear=SPSR;
0076 4EB1 in R20,0xe
0078 .dbline 72
0078 ; clear=SPDR; //通过先读SPSR,紧接着访问SPDR来对SPIF清零
0078 4FB1 in R20,0xf
007A .dbline 74
007A ;
007A ; Set_CS(1); //
007A 01E0 ldi R16,1
007C D7DF xcall _Set_CS
007E .dbline 75
007E ; return clear;
007E 042F mov R16,R20
0080 .dbline -2
0080 L16:
0080 0E940000 xcall pop_gset1
0084 .dbline 0 ; func end
0084 0895 ret
0086 .dbsym r clear 20 c
0086 .dbsym r order 20 c
0086 .dbend
0086 .dbfunc e Read_Byte _Read_Byte fc
0086 ; date -> R20
0086 ; clear -> R22
0086 ; Address -> R10
.even
0086 _Read_Byte::
0086 0E940000 xcall push_gset3
008A A02E mov R10,R16
008C .dbline -1
008C .dbline 79
008C ; }
008C ; //**从2515指定地址Address读取一个字节数据Data**//
008C ; uchar Read_Byte(uchar Address)
008C ; {uchar clear;
008C .dbline 81
008C ; uchar date;
008C ; Set_CS(0); //使能SPI器件
008C 0027 clr R16
008E CEDF xcall _Set_CS
0090 .dbline 83
0090 ;
0090 ; SPDR=0x03; //送2515读指令为0x03
0090 83E0 ldi R24,3
0092 8FB9 out 0xf,R24
0094 L24:
0094 .dbline 84
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -