📄 pwm.c
字号:
#include "hardware.h"#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/ioctl.h>#include <pthread.h>#include "temp.h"#include "nano-X.h"#define SPE6I PCONE&=(~0x3000)#define SPE6O PCONE|=0x1000#define SPE60 PDATE&=(~0x40)#define SPE61 PDATE |=0x40#define CONT 10#define MID CONT/2extern GR_GC_ID gc;void init_pwm();void init_pe6();int readtemperature();void delay(int t);int init_ds18b20();void writeonechar(unsigned char command);unsigned char readonechar();void * pwm(void *data);void dotemp(float temp,GR_GC_ID gc);void init_pwm(){ TCFG0|=((0<<24)|(0x19<<8) ); TCFG1&=(~0xf<<8);}void init_pe6(){ SPE6I; SPE6O; PUPD=0x0;}void delay(int t){ TCNTB2= CONT * t; TCON|=(0x1<<13); TCON&=~(0x1<<13); TCON|=(0x1<<12); while(!TCNTO2); while(TCNTO2); TCON&=~(0x1<<12);}int init_ds18b20(){ SPE61; SPE60; delay(80); SPE61; delay(2); PCONE&=(~0x3000); delay(4); return (PDATE&0x40)>>6;}void writeonechar(unsigned char command){ unsigned char i; unsigned char j; SPE6O; for(i=0;i<8;i++) { SPE60; for(j=0;j<10;j--); if((command & 0x01)==0) { SPE60; delay(4); } else { SPE61; delay(4); } SPE61; for(j=0;j<10;j--); command>>=1; }}unsigned char readonechar(){ unsigned char i; unsigned char j; unsigned char temp; temp=0; for(i=0;i<8;i++) { SPE6O; for(j=0;j<5;j++); SPE60; for(j=0;j<5;j++); temp>>=1; SPE6I; delay(2); if(PDATE&0x40); if(PDATE&0x40) temp|=0x80; else temp|=0x00; delay(10); } return temp;}void * pwm(void *data){ int t; float tt; int i=0; init_pe6(); init_pwm(); PDATE |=0x40; t=readtemperature(); tt=t*0.0625; if(tt-dtemp<10) { dotemp(tt,gc); } dtemp=tt; for(i=0;i<660;i++); return NULL;}int readtemperature(){ unsigned char a; unsigned char b,i; int t; INTMSK|=(0x1<<26); PDATE |=0x40; delay(33); init_ds18b20(); delay(33); writeonechar(0xCC); writeonechar(0x44); SPE6O; SPE61; for(i=0;i<10;i++) delay(1000); if(init_ds18b20()==1) printf("error\n"); delay(33); //iiiiiiiiiiiii writeonechar(0xCC); writeonechar(0xBE); SPE6O; SPE61; delay(100); a=readonechar(); b=readonechar(); INTMSK&=~(0x1<<26); t=b; t<<=8; t=t|a; delay(1000); return t;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -