;; ;; mur.sat ;; ;; Somewhen in the year 20xx, mur.at will have a nano satellite launched ;; into a low earth orbit (310 km above the surface of our planet). The ;; satellite itself is a TubeSat personal satellite kit, developed and ;; launched by interorbital systems. mur.sat is a joint venture of mur.at, ;; ESC im Labor and realraum. ;; ;; Please visit the project hompage at sat.mur.at for further information. ;; ;; ;; Copyright (C) 2011-2015 Christian Pointner ;; ;; This file is part of mur.sat. ;; ;; mur.sat is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; any later version. ;; ;; mur.sat is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with mur.sat. If not, see . ;; ;; ------------------------------------- i2c_start movlb .1 bcf I2C_SDA nop bcf I2C_SCL movlb .0 return ;; ------------------ i2c_restart movlb .1 bsf I2C_SDA nop bsf I2C_SCL nop nop nop bcf I2C_SDA nop bcf I2C_SCL movlb .0 return ;; ------------------ i2c_stop movlb .1 bsf I2C_SCL nop bsf I2C_SDA movlb .0 return ;; ------------------ i2c_send_byte movwf I2C_BYTE movlw .8 movwf I2C_BIT_CNT movlb .1 i2c_send_byte_next btfss I2C_BYTE,7 bcf I2C_SDA btfsc I2C_BYTE,7 bsf I2C_SDA nop bsf I2C_SCL nop nop bcf I2C_SCL rlf I2C_BYTE,f decfsz I2C_BIT_CNT,f goto i2c_send_byte_next nop nop bsf I2C_SDA bsf I2C_SCL movlb .0 movf PORTB,w movlb .1 bcf I2C_SCL bcf I2C_SDA movlb .0 andlw b'00010000' movwf I2C_BYTE swapf I2C_BYTE,f return ;; ------------------ i2c_recv_byte clrf I2C_BYTE movlw .8 movwf I2C_BIT_CNT movlb .1 bsf I2C_SDA i2c_recv_byte_loop bsf I2C_SCL movlb .0 btfsc I2C_SDA bsf I2C_BYTE,0 movlb .1 bcf I2C_SCL decfsz I2C_BIT_CNT,f goto i2c_recv_byte_next bcf I2C_SDA movlb .0 return i2c_recv_byte_next bcf STATUS,C rlf I2C_BYTE,f goto i2c_recv_byte_loop ;; ------------------ i2c_ack movlb .1 bcf I2C_SDA bsf I2C_SCL nop nop bcf I2C_SCL movlb .0 return ;; ------------------ i2c_nack movlb .1 bsf I2C_SDA bsf I2C_SCL nop nop bcf I2C_SCL bcf I2C_SDA movlb .0 return ;; -------------------------------------