冰楓論壇

標題: PIC16F877A DIP40 PIC16F Microchip [打印本頁]

作者: 洪嵐峰    時間: 2023-4-9 16:34
標題: PIC16F877A DIP40 PIC16F Microchip
PIC16F877A是Microchip公司生產的8位元通用型別微控制器,屬於PIC16系列的產品。

它具有40個封裝的直插式(DIP)腳位,可用於各種應用,例如工業自動化、電源管理、嵌入式系統等。該微控制器採用Flash記憶體技術,具有高速運算、低功耗、豐富的周邊設備和靈活的程式編程能力。

它還支持多種通訊介面,如UART、SPI和I2C,並具有多個定時器和計數器,可用於時間計量和脈衝計數等應用。

要製作一個可程式溫控器,需要以下零件:

PIC16F877A微控制器
溫度傳感器(例如DS18B20)
顯示屏(例如LCD1602)
溫度控制器(例如繼電器)
其他必要的電子元件(例如電容、電阻、電源等)
以下是PIC16F877A的DIP40腳位配置:

PIC16F877A DIP40腳位配置圖

以下是製作可程式溫控器所需的基本程式碼:


#include <16F877A.h> //引入PIC16F877A的頭文件
#fuses HS, NOWDT, NOPROTECT, NOLVP //設置FUSE位
#use delay(clock=20000000) //使用20MHz的內部晶體振盪器

#define DQ PIN_C0 //定義DS18B20溫度傳感器的DQ腳位為C0
#define RELAY PIN_C1 //定義繼電器控制腳位為C1

void main()
{
   float temp;
   setup_adc_ports(NO_ANALOGS); //設置ADC輸入端口
   setup_adc(ADC_OFF); //關閉ADC
   output_low(RELAY); //初始化繼電器為關閉狀態
   
   while(TRUE)
   {
      temp = read_temperature(); //讀取溫度
      
      if(temp >= 25) //如果溫度大於或等於25度
      {
         output_high(RELAY); //開啟繼電器控制
      }
      else //否則
      {
         output_low(RELAY); //關閉繼電器控制
      }
   }
}

float read_temperature()
{
   float temp;
   int16 raw;
   ow_reset(DQ); //溫度傳感器初始化
   ow_write_byte(DQ, 0xCC); //跳過ROM指令
   ow_write_byte(DQ, 0x44); //啟動溫度轉換指令
   delay_ms(750); //等待轉換完成
   ow_reset(DQ); //重置溫度傳感器
   ow_write_byte(DQ, 0xCC); //跳過ROM指令
   ow_write_byte(DQ, 0xBE); //讀取暫存器指令
   raw = ow_read_byte(DQ); //讀取溫度低8位
   raw |= (ow_read_byte(DQ) << 8); //讀取溫度高8位
   temp = (float)raw / 16.0; //計算實際溫度
   return temp; //返回溫度值
}




歡迎光臨 冰楓論壇 (https://bingfong.com/) Powered by 冰楓