📄 can18b20.lis
字号:
.module can18b20.c
.area data(ram, con, rel)
0000 _flag::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile F:\can-18b20(无浮点再调试)\can18b20.c
0001 .dbsym e flag _flag c
0001 _table::
0001 .blkb 2
.area idata
0001 3F06 .byte 63,6
.area data(ram, con, rel)
0003 .dbfile F:\can-18b20(无浮点再调试)\can18b20.c
0003 .blkb 2
.area idata
0003 5B4F .byte 91,'O
.area data(ram, con, rel)
0005 .dbfile F:\can-18b20(无浮点再调试)\can18b20.c
0005 .blkb 2
.area idata
0005 666D .byte 'f,'m
.area data(ram, con, rel)
0007 .dbfile F:\can-18b20(无浮点再调试)\can18b20.c
0007 .blkb 2
.area idata
0007 7D07 .byte 125,7
.area data(ram, con, rel)
0009 .dbfile F:\can-18b20(无浮点再调试)\can18b20.c
0009 .blkb 2
.area idata
0009 7F6F .byte 127,'o
.area data(ram, con, rel)
000B .dbfile F:\can-18b20(无浮点再调试)\can18b20.c
000B .dbsym e table _table A[10:10]c
.area text(rom, con, rel)
0000 .dbfile F:\can-18b20(无浮点再调试)\can18b20.c
0000 .dbfunc e init_SPI _init_SPI fV
.even
0000 _init_SPI::
0000 .dbline -1
0000 .dbline 48
0000 ; #include <iom8v.h>
0000 ; #include <macros.h>
0000 ; #include "mcp2515.h"
0000 ;
0000 ; #define fosc 7372800 //晶振7.3728MHZ
0000 ;
0000 ; #define DQ (1<<5) //DQ接PC5
0000 ;
0000 ; #define S_CS PORTC|=0x02 //PC1片选线
0000 ; #define C_CS PORTC&=(~0x02)
0000 ;
0000 ; #define S_CLK PORTC|=0x01 //PC0时钟线
0000 ; #define C_CLK PORTC&=(~0x01)
0000 ;
0000 ; #define S_DATA PORTC|=0x04 //PC2数据
0000 ; #define C_DATA PORTC&=(~0x04)
0000 ; /**************************** Definitionen ***********************************/
0000 ; void init_SPI (void);
0000 ; void reset_MCP (void);
0000 ; void write_MCP (unsigned char adress, unsigned char value);
0000 ; unsigned char read_MCP(unsigned char adress);
0000 ; void fill_msg_box_0(void);
0000 ; void send_box_0 (void);
0000 ; void wait(unsigned int n);
0000 ; void init_can(void);
0000 ; void bit_modify(unsigned char adress,unsigned char cc, unsigned char value);
0000 ; void delay_1ms(void);
0000 ; void HC595_SENDDAT(char dat);
0000 ; void delay(unsigned int n);
0000 ; unsigned char crccheck(unsigned char *p,unsigned char len);
0000 ; void delay_us(unsigned int time);
0000 ; unsigned char ds1820_ack(void);
0000 ; unsigned char read_byte(void);
0000 ; void write_byte(unsigned char value);
0000 ; //unsigned char Read_Temperature(unsigned int *temperature);
0000 ; //unsigned char Read_RomCode(unsigned char *temp);
0000 ; //void ds1820_match(unsigned char *p);
0000 ; unsigned int count; //CAN发送间隔
0000 ; unsigned char wendu,shi,ge;
0000 ; unsigned char dot1;
0000 ; unsigned char minus_flag;
0000 ; unsigned char flag=0; //初始化,个位显示
0000 ; //0-9
0000 ; unsigned char table[10]={0x3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
0000 ; /**************************** Hauptprogramm **********************************/
0000 ; /*SPI初始化*/
0000 ; void init_SPI (void)
0000 ; {
0000 .dbline 50
0000 ; //HW_SPI=0x00; // PortB ist HW_SPI
0000 ; DDR_SPI|=0x2D; // CS\MOSI\SCK output MISO input
0000 87B3 in R24,0x17
0002 8D62 ori R24,45
0004 87BB out 0x17,R24
0006 .dbline 51
0006 ; SPCR=0x51; // SPI Controll Register set,Fosc/16
0006 81E5 ldi R24,81
0008 8DB9 out 0xd,R24
000A .dbline -2
000A L1:
000A .dbline 0 ; func end
000A 0895 ret
000C .dbend
000C .dbfunc e reset_MCP _reset_MCP fV
000C ; i -> <dead>
.even
000C _reset_MCP::
000C .dbline -1
000C .dbline 55
000C ; }
000C ; /*MCP2515复位*/
000C ; void reset_MCP (void)
000C ; { unsigned char i;
000C .dbline 56
000C ; PORTB&=~(1<<CS_CAN); // CS Low -> MCP enable
000C C298 cbi 0x18,2
000E .dbline 57
000E ; SPDR=RESET_MCP; // sende Reset Kommando
000E 80EC ldi R24,192
0010 8FB9 out 0xf,R24
0012 L3:
0012 .dbline 58
0012 L4:
0012 .dbline 58
0012 ; while(!(SPSR & (1<<SPIF))); // warten bis das Byte gesendet wurde
0012 779B sbis 0xe,7
0014 FECF rjmp L3
0016 .dbline 59
0016 ; PORTB|=(1<<CS_CAN); // CS High -> MCP disable
0016 C29A sbi 0x18,2
0018 .dbline 60
0018 ; wait(1000); // waiting?
0018 08EE ldi R16,1000
001A 13E0 ldi R17,3
001C 26D1 rcall _wait
001E .dbline -2
001E L2:
001E .dbline 0 ; func end
001E 0895 ret
0020 .dbsym l i 1 c
0020 .dbend
0020 .dbfunc e send_box_0 _send_box_0 fV
.even
0020 _send_box_0::
0020 .dbline -1
0020 .dbline 64
0020 ; }
0020 ; /*CAN发送请求*/
0020 ; void send_box_0 (void)
0020 ; {
0020 .dbline 65
0020 ; write_MCP (TXB0CTRL, 0x0B); // sende Telegramm mit h鯿hster Priorit鋞
0020 2BE0 ldi R18,11
0022 00E3 ldi R16,48
0024 07D0 rcall _write_MCP
0026 .dbline 66
0026 ; PORTB&=~(1<<CS_CAN); // CS Low -> MCP enable
0026 C298 cbi 0x18,2
0028 .dbline 67
0028 ; SPDR=(RTS | 0x01); // sende Mailbox Nummer 0
0028 81E8 ldi R24,129
002A 8FB9 out 0xf,R24
002C L7:
002C .dbline 68
002C L8:
002C .dbline 68
002C ; while(!(SPSR & (1<<SPIF))); // warten bis das Byte gesendet wurde
002C 779B sbis 0xe,7
002E FECF rjmp L7
0030 .dbline 69
0030 ; PORTB|=(1<<CS_CAN); // CS High -> MCP disable
0030 C29A sbi 0x18,2
0032 .dbline -2
0032 L6:
0032 .dbline 0 ; func end
0032 0895 ret
0034 .dbend
0034 .dbfunc e write_MCP _write_MCP fV
0034 ; value -> R18
0034 ; adress -> R16
.even
0034 _write_MCP::
0034 .dbline -1
0034 .dbline 73
0034 ; }
0034 ; /*MCP2515写操作*/
0034 ; void write_MCP (unsigned char adress, unsigned char value)
0034 ; {
0034 .dbline 74
0034 ; PORTB&=~(1<<CS_CAN); // CS Low -> MCP enable
0034 C298 cbi 0x18,2
0036 .dbline 75
0036 ; SPDR=0x02; // sende Write Kommando
0036 82E0 ldi R24,2
0038 8FB9 out 0xf,R24
003A L11:
003A .dbline 76
003A L12:
003A .dbline 76
003A ; while(!(SPSR & (1<<SPIF))); // warten bis das Byte gesendet wurde
003A 779B sbis 0xe,7
003C FECF rjmp L11
003E .dbline 77
003E ; SPDR=adress; // Addresse senden
003E 0FB9 out 0xf,R16
0040 L14:
0040 .dbline 78
0040 L15:
0040 .dbline 78
0040 ; while(!(SPSR & (1<<SPIF))); // warten bis das Byte gesendet wurde
0040 779B sbis 0xe,7
0042 FECF rjmp L14
0044 .dbline 79
0044 ; SPDR=value; // Wert senden
0044 2FB9 out 0xf,R18
0046 L17:
0046 .dbline 80
0046 L18:
0046 .dbline 80
0046 ; while(!(SPSR & (1<<SPIF))); // warten bis das Byte gesendet wurde
0046 779B sbis 0xe,7
0048 FECF rjmp L17
004A .dbline 81
004A ; PORTB|=(1<<CS_CAN); // CS High -> MCP disable
004A C29A sbi 0x18,2
004C .dbline -2
004C L10:
004C .dbline 0 ; func end
004C 0895 ret
004E .dbsym r value 18 c
004E .dbsym r adress 16 c
004E .dbend
004E .dbfunc e read_MCP _read_MCP fc
004E ; spidata -> R20
004E ; adress -> R16
.even
004E _read_MCP::
004E 00D0 rcall push_gset1
0050 .dbline -1
0050 .dbline 85
0050 ; }
0050 ; /*MCP2515读操作*/
0050 ; unsigned char read_MCP(unsigned char adress)
0050 ; {
0050 .dbline 88
0050 ; unsigned char spidata;
0050 ;
0050 ; PORTB&=~(1<<CS_CAN); // CS Low -> MCP enable
0050 C298 cbi 0x18,2
0052 .dbline 89
0052 ; SPDR=0x03; // sende Read Kommando
0052 83E0 ldi R24,3
0054 8FB9 out 0xf,R24
0056 L21:
0056 .dbline 90
0056 L22:
0056 .dbline 90
0056 ; while(!(SPSR & (1<<SPIF))); // warten bis das Byte gesendet wurde
0056 779B sbis 0xe,7
0058 FECF rjmp L21
005A .dbline 91
005A ; SPDR=adress; // Adresse von der gelesen werden soll
005A 0FB9 out 0xf,R16
005C L24:
005C .dbline 92
005C L25:
005C .dbline 92
005C ; while(!(SPSR & (1<<SPIF))); // warten bis das Byte gesendet wurde
005C 779B sbis 0xe,7
005E FECF rjmp L24
0060 .dbline 93
0060 ; SPDR=0xAA; // Dummy-Byte senden
0060 8AEA ldi R24,170
0062 8FB9 out 0xf,R24
0064 L27:
0064 .dbline 94
0064 L28:
0064 .dbline 94
0064 ; while(!(SPSR & (1<<SPIF))); // warten bis das Byte gesendet wurde
0064 779B sbis 0xe,7
0066 FECF rjmp L27
0068 .dbline 95
0068 ; spidata = SPDR; // Daten aus SPI abholen
0068 4FB1 in R20,0xf
006A .dbline 96
006A ; PORTB|=(1<<CS_CAN); // CS High -> MCP disable
006A C29A sbi 0x18,2
006C .dbline 97
006C ; return (spidata);
006C 042F mov R16,R20
006E .dbline -2
006E L20:
006E 00D0 rcall pop_gset1
0070 .dbline 0 ; func end
0070 0895 ret
0072 .dbsym r spidata 20 c
0072 .dbsym r adress 16 c
0072 .dbend
0072 .dbfunc e bit_modify _bit_modify fV
0072 ; value -> R20
0072 ; cc -> R18
0072 ; adress -> R16
.even
0072 _bit_modify::
0072 00D0 rcall push_gset1
0074 4A81 ldd R20,y+2
0076 .dbline -1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -