Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Delay function for up to 4552ms at 7.37Mhz FOSC */
- void wait_ms(unsigned int wait) {
- float tick = 0;
- unsigned int loopValue = 0;
- T1CON = 0x0030; // Set prescaler for T1 to 256
- tick = 69*1e-6; // Calculate tick for given FOSC
- wait = wait * 1e-3;
- loopValue = (unsigned int) ( wait / tick );
- TMR1 = 0; // Clear T1 registers
- _TON = 1; // Start T1
- while (TMR1 < loopValue); // Delay for @wait
- _TON = 0; // Stop T1
- }
- /* Delay function for up to 142276us at 7.37Mhz FOSC*/
- void wait_us(unsigned int wait) {
- float tick = 0;
- unsigned int loopValue = 0;
- T1CON = 0x0010; // Set prescaler for T1 to 8
- tick = 2*1e-6; // Calculate tick for given FOSC
- wait = wait * 1e-6;
- loopValue = (unsigned int) ( wait / tick );
- TMR1 = 0; // Clear T1 registers
- _TON = 1; // Start T1
- while (TMR1 < loopValue); // Delay for @wait
- _TON = 0; // Stop T1
- }
- /* Function to start T1 */
- void startTimer() {
- TMR1 = 0; // Clear T1 registers
- _T1IP = 0x01; // Set T1 interrupt priority lvl
- _T1IF = 0; // Clear T1 interrupt flag
- _T1IE = 1; // Enable T1 interrupt
- T1Flag = 0; // Flag for T1 overflow
- T1CON = 0x8010; // Set prescaler for T1 to 8 and start T1
- }
- /* Stop T1 and calculate the signal time. Returns signal time in us. */
- unsigned int stopTimer() {
- unsigned int sigTime = 0, TMRValue = 0;
- float tick;
- TMRValue = TMR1; // Save current T1 register value
- _TON = 0; // Stop T1
- T1Flag = 0; // Flag for T1 overflow
- tick = 2; // Calculate tick for given FOSC
- sigTime = (unsigned int) (TMRValue * tick);
- return sigTime;
- }
- /* Initalises communication with the sensor */
- void sendStartSignal() {
- BUSHIGH; // Set logical bus state to high
- WRITE; // Bus pin as output
- BUSLOW; // Set logical bus state to low
- wait_ms(20); // Wait for at least 18ms
- BUSHIGH; // Set logical bus state to high
- wait_us(39); // Wait for at least 20us
- READ; // Bus pin as input
- }
- /* Listen on the bus for sensor start signal */
- unsigned char waitForSensor() {
- startTimer(); // Start T1 to determine sensor start signal time
- while (!DATADHT && !T1Flag); // Sensor pulls bus low for ~80us
- if (T1Flag) {
- stopTimer();
- return 0;
- }
- else {
- while (DATADHT && !T1Flag); // Sensor pulls bus high for ~80us
- if (T1Flag) {
- stopTimer();
- PutsXLCD("hier");
- return 0;
- }
- else {
- unsigned int time = stopTimer(); // Stop timer
- if (time >= 160 && !T1Flag)
- return 1;
- else
- return 0;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement