新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > SLE4442卡_IC的51單片機驅動程序

        SLE4442卡_IC的51單片機驅動程序

        作者: 時間:2016-12-02 來源:網絡 收藏
        整理了最初的實驗草稿版,將端口宏定義,函數聲明以及常用的函數聲明建立頭文件,感覺清楚多了,在不斷地修改中凝練,在不停的實踐中提高,滿眼的思緒,在小小的Readme中劃過一筆~~~~~~~~

        char data_RST[4], ErrorCount[4];

        本文引用地址:http://www.104case.com/article/201612/324690.htm

        void IC_RST(void)
        {
        uchar value,i,count;
        DATA_IN; //IC輸入
        RST_LOW; //復位時序
        CLK_LOW;
        DATA_HIGH;
        DelayUs(5);
        RST_HIGH;
        DelayUs(5);
        CLK_HIGH;
        DelayUs(5);
        CLK_LOW;
        DelayUs(5);
        RST_LOW;
        DelayUs(2);
        for(i=0;i<4;i++) //讀4個BYTE 可用后面的Byte_Read()代替
        {
        value = 0xff;
        for(count=0;count<8;count++)
        {
        value = value >> 1;
        DelayUs(2);
        CLK_LOW;
        DelayUs(2);
        CLK_HIGH;
        DelayUs(2);
        if(RD5 == 1)
        {
        value |= 0x80; //判斷IO腳是否為1,是則位置1
        }
        else
        {
        value &= 0x7f; //否則位置0
        }
        DelayUs(2);

        }
        data_RST[i] = value;
        DelayUs(2);
        }
        DelayUs(2);
        CLK_LOW;
        DelayUs(2);
        DATA_HIGH;
        }

        void IC_Init(void) //初始化
        {
        TRISD1 = 0;
        RD1 = 0; //上電
        TRISD4 = 0; //時鐘輸出
        TRISD3 = 0; //RST輸出
        DelayMs(5); //上電的必要延時,否則程序出錯
        }


        void Start(void)
        {
        DATA_OUT; //開始時序
        CLK_LOW;
        DATA_HIGH;
        DelayUs(2);
        CLK_HIGH;
        DelayUs(2);
        DATA_LOW;
        DelayUs(2);
        CLK_LOW;
        }

        void Stop(void) //結束時序
        {
        DATA_OUT;
        CLK_LOW;
        NOP();
        NOP();
        DATA_LOW;
        DelayUs(2);
        CLK_HIGH;
        DelayUs(2);
        DATA_HIGH;
        DelayUs(2);
        }

        uchar Byte_Read(void) //讀字節
        {
        uchar count;
        uchar value;
        DATA_IN;
        DelayUs(2);
        value = 0xff;
        for(count=0;count<8;count++)
        {
        value = value >> 1; //循環右移,從最低位開始讀
        DelayUs(2);
        CLK_LOW;
        DelayUs(2);
        CLK_HIGH;
        DelayUs(2);
        if(RD5 == 1)
        {
        value |= 0x80;//判斷IO腳是否為1
        }
        else
        {
        value &= 0x7f;
        }
        DelayUs(2);
        }
        return (value);
        }


        上一頁 1 2 3 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 阳新县| 泸定县| 清涧县| 当阳市| 汽车| 宣汉县| 衡阳县| 甘孜| 惠安县| 吉木萨尔县| 汶上县| 宁海县| 博罗县| 焉耆| 海阳市| 南木林县| 东乌珠穆沁旗| 同德县| 隆化县| 静乐县| 桓仁| 天峻县| 大竹县| 韶关市| 金门县| 大同县| 庄浪县| 宝鸡市| 泉州市| 宁河县| 资中县| 上高县| 中西区| 金湖县| 县级市| 平谷区| 邵阳县| 神木县| 拜城县| 安图县| 沂源县|