久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 955|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)+SJA1000硬件連接測試程序沒有達(dá)到書上說的閃爍

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:53813 發(fā)表于 2022-11-23 14:22 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
以下是根據(jù),網(wǎng)上流傳的的CAN-bus現(xiàn)場總線基礎(chǔ)教程【第3章】提供的測試程序,抄錄下來
稍許改了下, 但是燈不會(huì)閃爍。 求指點(diǎn)

單片機(jī)源程序如下:
/************************************************************************************************
文件:    main.c
功能:    測試SJA1000硬件連接,如果正常,D1以1S的周期閃爍,否則以0.1S的周期閃爍
************************************************************************************************/
#include "config.h"            //包含頭文件   

#define T0_Mask 0x0F

//定義SJA1000 訪問基地址
#define SJA_BASE_ADDR    0xA000

sbit D2 = P3^3;                //定義LED
sbit D5 = P2^6;                //定義LED


//定義一個(gè)指向外部存儲(chǔ)空間的指針變量,并將其指向SJA1000訪問的基地址
//(對(duì)SJA1000寄存器的讀/寫通過操作該指針來完成)
xdata unsigned char *SJA_CS_Point = (xdata unsigned char *)SJA_BASE_ADDR;

/******************************
**函數(shù)名稱:Write_SJA_Reg
**函數(shù)功能:寫SJA1000寄存器
**輸入?yún)?shù):RegAddr 寄存器起始地址        
            Value  寄存器的值     
**輸出參數(shù):無
**返回值:      無
*********************************/

void Write_SJA_Reg(unsigned char RegAddr, unsigned char Value)
{
    *(SJA_CS_Point+RegAddr) = Value;   // 值付給基址+寄存器地址

    return;                              // 返回繼續(xù)
   
}

/******************************
**函數(shù)名稱:Read_SJA_Reg
**函數(shù)功能:寫SJA1000寄存器
**輸入?yún)?shù):RegAddr 寄存器起始地址                    
**輸出參數(shù):無
**返回值:      指針變量指向外部(基址+寄存器)的地址
*********************************/

//讀SJA1000寄存器
//void Read_SJA_Reg(unsigned char RegAdr)

unsigned char Read_SJA_Reg(unsigned char RegAddr)
{
    return(*(SJA_CS_Point+RegAddr));      // 返回指針指向的地址
   
}

/******************************
**函數(shù)名稱:SJA1000_TestReg
**函數(shù)功能:測試函數(shù),驗(yàn)證主控制器和SJA1000硬件連接
**            REG_CAN_TEST 測試寄存器 ,地址0x09
**輸入?yún)?shù):無               
**輸出參數(shù):無
**返回值:      1->硬件連接正常,可以通訊; 0->通訊故障
*********************************/

//測試SJA1000總線接口是否正常
char SJA1000_TestReg(void)
{//status 狀態(tài),1 =    正常;0 = 故障;
//temp   測試值
    unsigned char temp,status,RegAddr;            
    status =1;
   
    temp =0x55;
    Write_SJA_Reg(REG_CAN_TEST, temp);         //寫入SJA1000測試寄存器
    if(Read_SJA_Reg(RegAddr) != temp)        //若讀出值與寫入值不同
        {
            status = 0;                     //則讀/寫SJA1000芯片出差
        }

    temp = 0xAA;   
    Write_SJA_Reg(REG_CAN_TEST, temp);         //寫入SJA1000測試寄存器
    if(Read_SJA_Reg(RegAddr) != temp)        //若讀出值與寫入值不同
        {
            status = 0;                     //則讀/寫SJA1000芯片出差
        }

    return(status);                            //通過SJA1000讀/寫測試
}

/*
******************************
精準(zhǔn)延時(shí)函數(shù)
******************************
*/

//先定時(shí)器0初始化函數(shù)
void timerInit(void)
{
    TMOD &= ~T0_Mask;                         //置零,清除舊設(shè)置(#define T0_Mask 0x0F)
    TMOD |= 0x01;                                     //置1, 設(shè)置新模式,16位定時(shí)器
   
}

//延時(shí)(0.01*n)s
/******************************
**函數(shù)名稱:TimerDelay
**函數(shù)功能:通過使用定時(shí)器0實(shí)現(xiàn)精確延時(shí)
**輸入?yún)?shù):n -> 延時(shí)的10ms 的個(gè)數(shù)               
**輸出參數(shù):無
**返回參數(shù):無      
*********************************/
void timerDelay(unsigned int n)            
{
    do
        {//timer 裝載,定時(shí)10ms
            TL0 = Low_Byte(65536UL-CPUCLK/100);
            TH0 = Hight_Byte(65536UL-CPUCLK/100);
            
         //啟動(dòng)定時(shí)器timer
             TR0 = 1;
         
         //等待定時(shí)器timer溢出
             while(!TF0);
            
         //關(guān)閉定時(shí)器timer
             TR0 = 0;
         
         //清除溢出標(biāo)志位
             TF0 = 0;
        }
    //循環(huán)n次
    while(--n != 0);
        
}

//主函數(shù)
void main(void)
{
    timerInit();
    D2 = 1;
    D5 = 1;
    //無限循環(huán),main()函數(shù)不允許返回
    for(;;)
        {
            if(SJA1000_TestReg()==1)        //SJA1000測試正常
                {
                    D2 = !D2;
                    timerDelay(100);        //延時(shí)1000ms,既以1S閃爍
                }
            else                            //否則,SJA1000測試失敗
                {
                    D5 = !D5;
                    timerDelay(100);        //延時(shí)100ms,既以0.1S閃爍
                }
        }
}

project-SJA1000 51.rar

37.49 KB, 下載次數(shù): 6

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品91 | 色接久久| 亚洲一区二区视频 | 人人亚洲| 日日日日日日bbbbb视频 | 在线视频一区二区三区 | 欧美日日 | 一本色道精品久久一区二区三区 | 国产精品日韩一区二区 | 久草视频在线播放 | 一级毛片视频在线 | 精品成人免费一区二区在线播放 | 在线观看国产精品视频 | 91免费入口 | 国产又色又爽又黄又免费 | 黑人巨大精品 | 成人性视频免费网站 | 91在线成人 | 欧美一级片在线播放 | 国产精品国产三级国产播12软件 | 精品久久国产老人久久综合 | 久久久91| 久久a久久 | 在线视频国产一区 | 欧美一级特黄aaa大片在线观看 | 九色在线观看 | 精品99久久| 欧美一级欧美一级在线播放 | 精品人伦一区二区三区蜜桃网站 | 国产日韩欧美二区 | 男女又爽又黄视频 | 久色视频在线观看 | 欧美三级视频在线观看 | av大片| 亚洲瑟瑟| 免费在线观看一区二区三区 | 狠狠干夜夜草 | 日韩五月天 | 亚洲欧美综合精品久久成人 | 91啪亚洲精品 | a级毛片毛片免费观看久潮喷 |