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

📄 can18b20.lis

📁 基于CAN总线的 温度采集方法。选用DS18B20温度传感器。
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .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 + -