|
RS232: CCS 可用 putc(), puts(), printf() 等函數將資訊透過標準 I/O (就是 RS232) 送出,用 getc(), gets() 等函數與 kbhit() 處理接收資訊所需的動作
第一階段: PIC 與 PC 用 RS232 通訊,PC 端用 Hyperterminal 收發即可,中間要加顆 MAX232 蕊片轉換電平準位 ... (該知道怎樣接線吧?)
第二階段: PIC 傳送給 PIC,中間加兩顆 MAX232
第三階段: PIC 傳送給 PIC,中間不加 MAX232
第四階段: PIC 傳送給 51,中間不加 MAX232
第一階段的程式,用下面這個範例就可以了
#include <16F877A.H>
#device ADC=10 // choose 10 bit AD instead of 8
#fuses HS, NOWDT, NODEBUG, NOLVP, PUT
#use delay(clock = 20000000) // 20 MHz crystal oscillator
#use rs232( baud = 9600, xmit = PIN_C6, rcv = PIN_C7 )
void main()
{
int8 n = 2;
int16 x;
printf("Hello world ! \r\n"); // 把字串從 RS232 送出
setup_adc_ports(ANALOG_NOT_RE1_RE2);// RA0..RA3, RA5, RE0 as 6 ch analog input
setup_adc( ADC_CLOCK_DIV_32 ); // 32 * T_osc = 1.6 us per bit at 20 MHz
// total = ( 10 bit + 2 )* 1.6 = 19.2 us
while(1)
{
set_adc_channel( n );// 設定通道, 採樣電容器開始充電
delay_us ( 30 ); // 等電容器充電到 1/2 LSB 的精度
// which takes ~ (1 + R_source / 10k) * 10 us
x = read_adc(); // open S/H, start ADC, T_conversion ~ 20 us, min.,
// wait for EOC then read and return the result.
printf("AN%d = %ld \r\n", n, x); // 把字串從 RS232 送出
delay_ms( 500 ); // 休息 0.5 秒
if ( kbhit() ) n = getc() - '0'; // 用 PC 的鍵盤鍵入 0 或 1, 2, 3 ... 變更 AD 通道
}
} |
|