新聞中心

        1-wire總線匯編程序

        作者: 時(shí)間:2013-01-07 來(lái)源:網(wǎng)絡(luò) 收藏

        ;**************匯編程**************************
        ;文件:1-wire.asm
        ;功能:接口程序
        ;器件:AT90S2313,DS1821
        ;時(shí)鐘:4.0MHz
        ;****************************************

        ;過(guò)程名:w1_init
        ;功能:1_wire總線
        ;入口參數(shù):無(wú)
        ;出口參數(shù):R30 1:有器件應(yīng)答 0:無(wú)器件應(yīng)答
        ;影響資源:R24,R25
        ;***************匯編程**************************
        w1_init:
        clr R30
        cbi w1_port, w1_bit ;輸出清零
        sbi w1_portd, w1_bit ;設(shè)置為輸出,將總線置為低電平
        ldi R24, 0xE0 ;延時(shí)480us
        ldi R25, 0x01
        d1:
        sbiw R24, 0x01
        brne d1
        cbi w1_portd, w1_bit ;設(shè)置為輸入,放開(kāi)總線
        ldi R24, 0x5D ;延時(shí)70us
        d2:
        dec R24
        brne d2
        sbis w1_pin, w1_bit ;總線為高電平,沒(méi)有器件應(yīng)答
        inc R30 ;總線為低電平,有器件應(yīng)答,置輸出R30=1
        ldi R24, 0xC2 ;延時(shí)450us,等待復(fù)位周期完成
        ldi R25, 0x01
        d3:
        sbiw R24, 0x01
        brne d3
        ret
        ;****************1-wire總線匯編程*************************
        ;過(guò)程名:w1_write
        ;功能:寫(xiě)入一個(gè)字節(jié)數(shù)據(jù)
        ;入口參數(shù):R23
        ;出口參數(shù):無(wú)
        ;影響資源:R22,R24,R25
        ;*****************1-wire總線匯編程************************
        w1_write:
        ldi R22, 0x08 ;置計(jì)數(shù)器
        write_next:
        rcall w1_write_bit ;寫(xiě)入一位
        ror R23 ;要寫(xiě)入的數(shù)據(jù)位移入最低位
        dec R22
        brne write_next ;8位未完,繼續(xù)下一位
        ret
        ;*****************************************
        ;過(guò)程名:w1_read
        ;功能:讀取一個(gè)字節(jié)數(shù)據(jù)
        ;入口參數(shù):無(wú)
        ;出口參數(shù):R30 讀取的8位數(shù)據(jù)存在R30中
        ;影響資源:R22,R24,R25
        ;*****************************************
        w1_read:
        ldi R22, 0x08 ;置計(jì)數(shù)器
        read_next:
        rcall w1_read_bit ;從總線上讀取一位
        dec R22
        brne read_next ;8位未完,繼續(xù)讀取下一位
        ret
        ;***************1-wire總線匯編程**************************
        ;過(guò)程名:w1_write_bit
        ;功能:寫(xiě)入一位數(shù)據(jù)
        ;入口參數(shù):R23.0
        ;出口參數(shù):無(wú)
        ;影響資源:R24
        ;*****************************************
        w1_write_bit:
        sbi w1_portd, w1_bit ;設(shè)置為輸出,將總線置為0
        ldi R24, 0x11
        d4:
        dec R24 ;延時(shí)12us
        brne d4
        sbrc R23, 0 ;要輸出0,則跳過(guò)下一行,總線保持為0
        cbi w1_portd, w1_bit ;設(shè)置為輸入,釋放總線,輸出1
        ldi R24, 0x64
        d5:
        dec R24 ;延時(shí)75us
        brne d5
        cbi w1_portd, w1_bit ;寫(xiě)入結(jié)束,設(shè)置為輸入,釋放總線
        ldi R24, 0x03 ;延時(shí)2us
        d6:
        dec R24
        brne d6
        ret
        ;*****************************************
        ;過(guò)程名:w1_read_bit
        ;功能:讀取一位數(shù)據(jù)
        ;入口參數(shù):無(wú)
        ;出口參數(shù):R30 讀取的1位數(shù)據(jù)存在R30中最高位,同時(shí)R30種原有的數(shù)據(jù)右移1位
        ;影響資源:C,R24
        ;*****************************************
        w1_read_bit:
        sbi w1_portd, w1_bit ;輸出0,把總線拉低
        ldi R24, 0x03 ;延時(shí)2us
        d7:
        dec R24
        brne d7
        cbi w1_portd, w1_bit ;設(shè)置為輸入,釋放總線
        ldi R24, 0x0F ;延時(shí)10us
        d8:
        dec R24
        brne d8
        clc
        sbic w1_pin, w1_bit ;總線為低電平,跳過(guò)下一行,C保持為0
        sec ;總線為高電平,C置1
        ror R30 ;C移入R30最高位
        ldi R24, 0x6B ;延時(shí)80us,等待周期結(jié)束
        d9:
        dec R24
        brne d9
        ret
        ;****************1-wire總線匯編程*************************
        ;This is the end



        關(guān)鍵詞: 1-wire總線 匯編程序 初始化

        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 罗田县| 永清县| 依安县| 榆树市| 麻江县| 灯塔市| 沐川县| 珲春市| 中宁县| 漳州市| 祁阳县| 勐海县| 新源县| 融水| 淮安市| 宜章县| 淅川县| 赤水市| 临漳县| 科技| 龙胜| 温泉县| 溆浦县| 公主岭市| 甘德县| 永平县| 招远市| 台北市| 浦江县| 康平县| 南充市| 普兰店市| 广南县| 灌南县| 资兴市| 敦煌市| 灯塔市| 宜黄县| 鄂州市| 桑日县| 左云县|