⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ser_14.c

📁 Low End Microchip PICs C函数
💻 C
字号:
// SER_14.C
//
//
// copyright, Peter H Anderson, Elmore, VT, June, '02

void ser_init(void) // sets TxData in idle state
{
#ifdef INV    // idle is TTL logic zero
#asm
   BCF STATUS, RP0
   BCF PORTC, TxData
   BSF STATUS, RP0
   BCF TRISC, TxData // TxData is an oputput
   BCF STATUS, RP0
#endasm

#else
#asm
   BCF STATUS, RP0
   BCF PORTC, TxData // idle state is TTL logic one
   BSF STATUS, RP0
   BCF TRISC, TxData
   BCF STATUS, RP0
#endasm
#endif

   ser_char(0x0c); // unique to PIC-n-LCD
   delay_ms(50);
}

void ser_char(byte ch) // serial output 9600 baud
{
   byte n, dly, gie_flag;
     // start bit + 8 data bits
   if(gie)		// if gie is enabled, turn it off
   {
	   gie_flag = TRUE;
	   while(gie)
	   {
		   gie = FALSE;
	   }
   }

   else
   {
	   gie_flag = FALSE;
   }
#ifdef INV    // idle is TTL logic zero
#asm
   BCF STATUS, RP0
   MOVLW 9
   MOVWF n
   BCF STATUS, C

SER_CHAR_1:

   BTFSS STATUS, C		// 4 ~
   BSF PORTC, TxData
   BTFSC STATUS, C
   BCF PORTC, TxData
   MOVLW 31				// 1 ~
   MOVWF dly			// 1 ~

SER_CHAR_2:
   DECFSZ dly, F			// 31 * 3 ~
   GOTO SER_CHAR_2		// 1 ~
   RRF ch, F			// 1 ~
   DECFSZ n, F			// 1 ~
   GOTO SER_CHAR_1	// next bit	// 2 ~

   BCF PORTC, TxData	// idle between characters
   CLRWDT
   MOVLW 96
   MOVWF dly

SER_CHAR_3:
   DECFSZ dly, F
   GOTO SER_CHAR_3
   CLRWDT
#endasm

#else  // idle is TTL logic one
#asm
   BCF STATUS, RP0
   MOVLW 9
   MOVWF n
   BCF STATUS, C

SER_CHAR_1:

   BTFSS STATUS, C
   BCF PORTC, TxData
   BTFSC STATUS, C
   BSF PORTC, TxData
   MOVLW 32
   MOVWF dly

SER_CHAR_2:
   DECFSZ dly, F
   GOTO SER_CHAR_2
   RRF ch, F
   DECFSZ n, F
   GOTO SER_CHAR_1

   BSF PORTC, TxData // back to idle state
   CLRWDT
   MOVLW 96
   MOVWF dly

SER_CHAR_3:
   DECFSZ dly, F
   GOTO SER_CHAR_3
   CLRWDT
#endasm
#endif
    delay_ms(5);
    if(gie_flag)	// if interrupts were enabled, enable them again
    {
		gie = 1;
	}
}

byte num_to_char(byte val) // converts val to hex character
{
   byte ch;
   if (val < 10)
   {
     ch=val+'0';
   }
   else
   {
     val=val-10;
     ch=val + 'A';
   }
   return(ch);
}

void ser_new_line(void) // outputs 0x0d, 0x0a
{
   ser_char(0x0d);
   delay_ms(10); // give the PIC-n-LCD time to perform the
   ser_char(0x0a); // new line function
   delay_ms(10);
}

void ser_hex_byte(byte val)
{
   byte d;
   char ch;
   d = val >> 4;
   ch = num_to_char(d); // high nibble
   ser_char(ch);
   d = val & 0xf;
   ch = num_to_char(d); // low nibble
   ser_char(ch);
}

void lcd_cursor_pos(byte line, byte pos)
{
	const byte a[4] = {0, 64, 20, 84};
	ser_char(0x01);	// unique to PIC-n-LCD
    ser_char(a[line]+pos);
}


void ser_out_str(byte *s)
{
   while(*s)
   {
      ser_char(*s);
      ++s;
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -