语法: value=input_x();

INPUT_x()是PIC CCS编译器中PIC单片机的专有函数。

语法:   value=input_a();

        value=input_b();

        value=input_c();

        value=input_d();

        value=input_e();

        value=input_f();

        value=input_g();

        value=input_h();

        value=input_i();

        value=input_k();

参数:   没有;

返回值:  返回值value是一个8位整型值,表示端口的输入数据;

功能:   该函数用来从一个端口读入一个整型字节.方向寄存器的值改变同最后一次使用#USE*_IO命令指定的保持一致. 在默认方式下,为标准I/O口,在input_x()被执行之前,数据方向被默认设为输入方式.

例子:   data=input_b( );  //读端口B的值

例子文件: ex_psp.c;文件ex_psp.c如下:

 Configure the CCS prototype card as follows:              

    Connect pin 23 to 27 and pin 21 to 28.                 

    Connect one end of the parrallel printer cable to the PC.   

    Also make the following connections:                  

         IBM parallel                                 

          cable pin     Protoboard                     

              1           22   E1                   

              2           32   D0                   

              3           33   D1                   

              4           34   D2                   

              5           35   D3                   

              6           36   D4                   

              7           37   D5                   

              8           38   D6                   

              9           39   D7                   

             11            1   C0                   

             12           27   gnd                  

             13           28   +5V                  

             15           28   +5V                  

             18           27   gnd                   

#if defined(__PCM__)  //若使用了PCM编译器,则defined( __PCM__)返回值为1

#include <16F877.h>   //包含16F877.h头文件

#fuses HS, NOWDT, NOPROTECT, NOLVP  //HS:高速晶振/谐振器, NOWDT:不使用WDT

                                       // NOPROTECT:程序存储器代码不保护

#use delay(clock=20000000)  //使能内置函数的功能:delay_ms()和delay_us()

                         //#USE DELAY()必须在#use rs232()使用之前出现.

#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

//使用波特率为9600,

//发送脚为PIN_C6

//接收脚为PIN_C7

//使能内置函数:getc(),putc()printf(), kbhit();

#elif defined(__PCH__)

#include <18F452.h>

#fuses HS, NOWDT, NOPROTECT, NOLVP

#use delay(clock=20000000)

#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)  // Jumpers: 8 to 11, 7 to 12

#error  For PIC18 change read/write _bank to use a buffer

#endif    //结束if定义

#define BUSY_LINE    PIN_C0   //用BUSY_LINE代替PIN_C0

#define BUFFER_SIZE  96        //用BUFFER_SIZE代替96

int next_in = 0;   //声明整型全局变量next_in,并赋初值0;

int next_out = 0;  //声明整型全局变量next_out,并赋初值0;

short data_lost = TRUE;  //声明短型(位)全局变量data_lost,并赋初值TRUE;

#int_psp         //并行端口PSP数据输入,指出下面的函数是一个中断服务函数

void psp_isr()  {

   if( psp_overflow( ) ) 

//当CS=0,WR=0,写PSP口,若上次写入的字节还没被读出,又发生第二次写入PSP,则IBOV位置1,表示溢出;

//当CS=0,RD=0,读PSP口,若一个字节还没被读入,PSP又有新的数据被锁存进来,则IBOV位置1,表示溢出;

     data_lost=TRUE;

   if( psp_input_full( ) ) {

//当CS=0且WR=0,发生写PSP口,当CS=1且WR=1时,输入缓冲器满标志位IBF=1,中断标志位PSPIF=1

      write_bank( 2,  next_in++,  input_D( ) ); //从PSP口(端口D)读入数据,存入bank2

      if( next_in == BUFFER_SIZE )

         next_in = 0;

      if( next_in == next_out )

         output_high( BUSY_LINE ); // PIN_C0脚输出高电平,表示PSP口忙

   }

}

void main( ) {

   setup_adc_ports( NO_ANALOGS );  //不使用模拟端口

   setup_psp( PSP_ENABLED );       //使用PSP口

   enable_interrupts( GLOBAL );       //开总中断允许位

   enable_interrupts( INT_PSP );       //PSP口中断使能

   output_low( BUSY_LINE );         // PIN_C0脚输出低电平,表示PSP口不忙

   printf( "Waiting for print data... \r\n\n" );  //从RS232口输出

   while( true )

   {

      if( next_in!=next_out )

      {

         putc( read_bank( 2,next_out) );

//将以bank2为基址, next_out为变址,其地址处的数据通过RS232口发送出去,

         if( ++next_out==BUFFER_SIZE )

            next_out=0;

         if(data_lost) {

            printf( "\r\nData Lost!!!\r\n" );

            data_lost = FALSE;

         }

         output_low( BUSY_LINE ); // PIN_C0脚输出低电平,表示PSP口不忙

      }

   }

}

上面的程序通过PSP口每读入一个数据,立即存入bank2,然后从bank2读出数据,通过RS232口发送出去;当next_in自加到96时,则清0,同样next_out自加到96时,也清0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值