winnie 发表于 2009-4-9 19:03:58

用CCS编写的与51单片机的通讯

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>
#deviceADC=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()
{
   int8n = 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 通道
   }
}
页: [1]
查看完整版本: 用CCS编写的与51单片机的通讯