找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2177|回复: 9
打印 上一主题 下一主题
收起左侧

求帮忙 基于pic16f690做一些最基础的小程序

[复制链接]
跳转到指定楼层
楼主
ID:1041233 发表于 2022-8-2 16:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有大佬帮忙看看吗 网上没咋找到教程 刚找的实习完全不会 求帮忙
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1041233 发表于 2022-8-2 16:56 | 只看该作者
#include<pic.h>
void port_init();
void usart_init();
void main()
{
    usart_init();
    port_init();
   
     //while(!TRMT);

    while(1);
}
void port_init()
{
    TRISC=0x00;
    TRISB=0xff;
    PORTC=0x00;
}
void usart_init()
{
    TXSTA=0x24;
    RCSTA=0x90;
    SPBRG=12;
    GIE=1;
    PEIE=1;
    RCIE=1;
}
void interrupt com()
{
   
      if(RCIE&&RCIF)
    {
        PORTC=RCREG;
        TXREG=RCREG;
        while(!TRMT);
    }

}有大佬帮忙看看这个串口通信吗
回复

使用道具 举报

板凳
ID:1041233 发表于 2022-8-2 16:58 | 只看该作者
还有数码管原理图上 跟信号灯同一个接口 但该怎么控制亮数码管和信号灯,默认好像是只亮信号灯
回复

使用道具 举报

地板
ID:401564 发表于 2022-8-3 17:06 | 只看该作者
论坛里有这个单片机的中文数据手册
下载下来,先看数据手册,再用PIC的编程软件编写代码和下载
都是用C语言的,跟8051没有太大的区别,基本是一两天就能上手了

不同的是PIC用的硬件堆栈,函数里面尽量不要有调用函数的代码,一个函数就是一个函数,代码全部写完,不要一个函数里双调用其它函数
PIC中断只有一个中断入口,跟8051是不一样的,所有的中断都是一个地址,进入中断之后要先查询中断标志位,检测是哪个中断触发了,然后再进行操作
中断函数中只做简单和处理,不要在中断函数中调用其它函数
回复

使用道具 举报

5#
ID:155507 发表于 2022-8-3 18:32 | 只看该作者
现在我们可以配置我们的数字 I/O,让我们创建“Hello World!”的微控制器版本。

在本例中,将带有串联电阻 (220-470 Ohm) 的 LED 连接到引脚 10 (RB7)。
我们将首先禁用所有模拟输入(因为我们没有使用任何模拟输入)。 然后,我们将所有数字 I/O 引脚设置为输入。 之后,我们将单独将引脚 RB7 设置为输出。 最后,我们将进入一个无限循环,让 LED 闪烁。

完成此操作的代码如下所示。 替换在指南的 MPLAB X & XC8 部分中创建的 main.c 文件的内容。
  1. #include <xc.h>

  2. #define _XTAL_FREQ 4000000

  3. #pragma config FOSC=INTRCIO, WDTE=OFF, PWRTE=OFF, MCLRE=ON, CP=OFF, \
  4.                 CPD=OFF, BOREN=OFF, IESO=OFF, FCMEN=OFF

  5. int main()
  6. {
  7.     TRISA = 0xFF;
  8.     TRISB = 0xFF;
  9.     TRISC = 0xFF;

  10.     ANSEL = 0x00;
  11.     ANSELH = 0x00;

  12.     TRISBbits.TRISB7 = 0;

  13.     while(1)
  14.     {
  15.         PORTBbits.RB7 = 1;
  16.         __delay_ms(500);
  17.         PORTBbits.RB7 = 0;
  18.         __delay_ms(500);
  19.     }

  20.     return 0;
  21. }
复制代码
回复

使用道具 举报

6#
ID:879348 发表于 2022-8-4 07:59 | 只看该作者
新手为什么要选择这款单片机呢
回复

使用道具 举报

7#
ID:1041233 发表于 2022-8-4 09:37 | 只看该作者
本帖最后由 ddahh 于 2022-8-4 10:09 编辑
angmall 发表于 2022-8-3 18:32
现在我们可以配置我们的数字 I/O,让我们创建“Hello World!”的微控制器版本。

在本例中,将带有串联 ...

老哥,现在成功了 感谢!!!
想问下要是传送字符串该怎么整啊
怎么改动语句呢
回复

使用道具 举报

8#
ID:155507 发表于 2022-8-4 18:51 | 只看该作者
ddahh 发表于 2022-8-4 09:37
老哥,现在成功了 感谢!!!
想问下要是传送字符串该怎么整啊
怎么改动语句呢

我给你来个程序试试



  1. #include <xc.h>
  2. #include <stdint.h>

  3. #define _XTAL_FREQ 4000000

  4. #pragma config FOSC=INTRCIO, WDTE=OFF, PWRTE=OFF, MCLRE=ON, CP=OFF, \
  5.                 CPD=OFF, BOREN=OFF, IESO=OFF, FCMEN=OFF

  6. //--------------------------------
  7. // Functions Declarations
  8. void UART_TRX_Init(void);

  9. // Globals
  10. uint8_t UART_Buffer = 0;
  11. //--------------------------------
  12. // Main Routine
  13. void main(void)
  14. {
  15.   //--[ Peripherals & IO Configurations ]--
  16.   UART_TRX_Init(); // Initialize The UART @ 9600bps
  17.   TRISC = 0x00; // Output Port (4-Pins)
  18.   PORTC = 0x00; // Initially OFF
  19.   //---------------------------
  20.   while(1)
  21.   {
  22.     // Stay Idle, Everything is handled in the ISR !
  23.     //PORTC = UART_Buffer;
  24.   }
  25.   return;
  26. }
  27. //--------------------------------
  28. // Functions Definitions

  29. void UART_TRX_Init()
  30. {
  31.   BRGH = 1; // Set For High-Speed Baud Rate
  32.   BRG16 = 0;  // FOSC/128
  33.   SPBRG = 25; // Set The Baud Rate To Be 9600 bps
  34.   // Enable The Ascynchronous Serial Port
  35.   SYNC = 0;
  36.   SPEN = 1;
  37.   // Set The RX-TX Pins to be in UART mode (not io)
  38.   TRISB6 = 1; // As stated in the datasheet
  39.   TRISB7 = 1; // As stated in the datasheet
  40.   //--[ Enable UART Receiving Interrupts ]--
  41.   RCIE = 1; // UART Receving Interrupt Enable Bit
  42.   PEIE = 1; // Peripherals Interrupt Enable Bit
  43.   GIE = 1; // Global Interrupt Enable Bit
  44.   //------------------
  45.   CREN = 1; // Enable Data Continous Reception
  46.   TXEN = 1; // Enable UART Transmission

  47. }

  48. void interrupt ISR (void)
  49. {
  50.   if (RCIF == 1)
  51.   {
  52.     UART_Buffer = RCREG; // Read The Received Data Buffer
  53.     PORTC = UART_Buffer; // Display The Received Data On LEDs
  54.         while(!TRMT);
  55.     TXREG = UART_Buffer;
  56.     RCIF = 0; // Clear The Flag
  57.   }
  58. }



复制代码
回复

使用道具 举报

9#
ID:401564 发表于 2022-8-4 20:09 | 只看该作者
wufa1986 发表于 2022-8-4 07:59
新手为什么要选择这款单片机呢

谁知道呢?如果不是工作需要或者有很大干扰源的电路,我都不想看一眼PIC
STC这个很多人的初恋型号她不香吗?
回复

使用道具 举报

10#
ID:155507 发表于 2022-8-5 08:53 | 只看该作者
ddahh 发表于 2022-8-2 16:58
还有数码管原理图上 跟信号灯同一个接口 但该怎么控制亮数码管和信号灯,默认好像是只亮信号灯

单片机是根据硬件电路图的设计来写代码的

任何模拟引脚必须先使用 ANSEL 和 ANSELH 寄存器禁用,然后才能用作数字 I/O。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表