zoukankan      html  css  js  c++  java
  • PIC18F

     1 #include<p18f6393.h>
     2 
     3 #define uchar unsigned char
     4 #define uint  unsigned int
     5 
     6 //函数声明
     7 void osc_init();//时钟初始化
     8 void uart_inter_init();//串口初始化
     9 void InterruptHandlerHigh();//中断函数
    10 
    11 
    12 //时钟初始化,选择内部时钟
    13 void osc_init()
    14 {
    15     OSCTUNE = 0x8f;//选择内部振荡器来源为8M INTOSC,最高频率8M
    16     OSCCON = 0xff;//内部8M时钟,OSC2输出Fosc/4        
    17 }
    18 
    19 
    20 //串口初始化
    21 void uart_inter_init()
    22 {
    23     //发送部分初始化
    24     TRISCbits.RC6=1;
    25     TRISCbits.RC7=1;
    26     RCSTA1bits.SPEN=1;//此位置1,将TX1和RX1设置为CK1(时钟)和DT1(数据)线
    27     
    28     TXSTA1bits.CSRC=1;//主控模式
    29     TXSTA1bits.SYNC=1;//同步模式
    30     
    31     //PIE1bits.TXIE=1;//如需要,则将此位置1
    32     
    33     BAUDCON1bits.SCKP=0;//空闲状态时钟为低电平
    34     BAUDCON1bits.BRG16=0;//8位波特率发生器,仅SPBRG1
    35     
    36     SPBRG1 =0xcf;//设置传输波特率设置为9600bps,
    37                 //8Mhz OSC 9600=FOSC/(4([SPBRG1] + 1)),
    38                 //SPBRG1=207 11101111
    39     TXSTA1bits.TXEN=1;//使能发送
    40     
    41     //接收部分初始化
    42     RCSTA1bits.SREN=0;//清零SREN
    43     RCSTA1bits.CREN=0;//清零CREN
    44                       //若SREN和CREN均被置1,则CREN具有优先权
    45     //RCSTA1bits.SREN=1;//置1 SREN
    46     RCSTA1bits.CREN=1;//置1 CREN
    47                       //若SREN和CREN均被置1,则CREN具有优先权
    48                       
    49     PIE1bits.RCIE=1//若需要中断,将此位置1,接收完后将产生一个中断
    50 
    51     //INTCONbits.GIE=1;
    52     //INTCONbits.PEIE=1;//若要使用中断,确保此两位为1                      
    53 }
    54 
    55 #pragma code InterruptVectorHigh=0x08//高优先级中断向量
    56 void InterruptVectorHigh(void)
    57 {
    58     _asm
    59     goto InterruptHandlerHigh         //跳到中断程
    60     _endasm
    61 }
    62 
    63 //高优先级中断服务程序
    64 #pragma code
    65 #pragma interrupt InterruptHandlerHigh
    66 void    InterruptHandlerHigh ()
    67 {
    68     while(PIR1bits.RCIF==1)        //若接收中断标志不为1,则为误操作,返回
    69     {
    70         TXREG1=RCREG1;        //将接收到的数据放入发送寄存器,并启动发送 
    71     }
    72 }
    73 
    74 void main()
    75 {
    76     osc_init();
    77     uart_init();
    78     TXREG1=0x55;////将数据装入TXREG1寄存器,启动发送
    79     for(;;);
    80 }
  • 相关阅读:
    数据库Connection.OPEN()异常情况下 耗时很久才回应
    System.Threading.Tasks.TaskExceptionHolder.Finalize() 系统错误c#
    WCF双向通讯netTCP
    并行LINQ PLinq
    winform调用http
    kindle电子书的资源网站
    vscode设置中文语言
    Python拼接路径
    Python查看已安装模块
    Python查看模块版本
  • 原文地址:https://www.cnblogs.com/loves6036/p/5218860.html
Copyright © 2011-2022 走看看