#include #include #include #include "UPSD3200.H"#include "upsd_pwm.h"#define uint unsigned int#define uchar unsigned charPSD_REGS PSD8xx_reg _at_ csiop;#define KEYIO (~(PSD8xx_reg.DATAIN_A)) & 0x07sbi
/*******************************************KEIL里擴(kuò)展出了b,h,l來對(duì)輸入字節(jié)寬的設(shè)置:(1)b八位(2)h十六位(默認(rèn))(3)l三十二位在Keil C51中用printf輸出一個(gè)單字節(jié)變量時(shí)要使用%bd,如unsigned char counter
Interrupt Functions中斷函數(shù)8051及其變種提供了一定數(shù)量的硬件中中斷,這些中斷有:Interrupt Number Interrupt Description Address0 EXTERNAL INT 0 0003h1 TIMER/COUNTER 0 000Bh2 EXTERNAL INT 1 0013h3
#define ROMADDRESS0xA0sfr IIC_CON = 0xA0; sbit WP = IIC_CON^5;sfr IIC_INTER = 0x90; sbit SCL = IIC_INTER^6; sbit SDA = IIC_INTER^7;bit ack; /*應(yīng)答標(biāo)志位*/void DelayMs(unsigned char i) { unsigned
C51函數(shù)聲明對(duì)ANSI C作了擴(kuò)展,具體包括:1.中斷函數(shù)聲明:中斷聲明方法如下:void serial_ISR () interrupt 4 [using 1]{/* ISR */}為提高代碼的容錯(cuò)能力,在沒用到的中斷入口處生成iret語句,定義沒用到的中斷。/*
1. LAB100.C(12): error C216: subscript on non-array or too many dimensions 原程序如下:#include#includevoiddelay(int);unsignedcharcodedis_code[8]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a};main(){inti,
匯編是從org 0000h開始啟動(dòng),那么keil c51是如何啟動(dòng)main()函數(shù)的?keil c51有一個(gè)啟動(dòng)程序startup.a51,它總是和c程序一起編譯和鏈接。下面看看它和main()函數(shù)是如何編譯的;//主函數(shù)如下;void main(void){while (
對(duì) 51 單片機(jī)內(nèi)存的認(rèn)識(shí),很多人有誤解,最常見的是以下兩種① 超過變量128后必須使用compact模式編譯 實(shí)際的情況是只要內(nèi)存占用量不超過 256.0 就可以用 small 模式編譯② 128以上的某些地址為特殊寄存器使用,不能
code是KEIL C51 擴(kuò)展的關(guān)鍵字,用code修飾的變量將會(huì)被放到CODE區(qū)里。但C語里的const關(guān)鍵字好像也有定義不能改變的變量的功能,這兩個(gè)關(guān)鍵字有什么區(qū)別呢?在幫助手冊里查找const,可以找到以下的描述1 Variables
找到了一個(gè)現(xiàn)成的例子,對(duì)于讀寫U盤,文件系統(tǒng)是個(gè)大麻煩?,F(xiàn)在一直還沒有弄明白,先收藏一下這個(gè)程序先,等到后面慢慢研究。 作者這個(gè)編程規(guī)范不錯(cuò),注釋很豐富,值得學(xué)習(xí)。#include#include"CH375INC.H"#include/*
/* 6位數(shù)碼管演示程序: 顯示數(shù)碼從0---99循環(huán),按 P3.2 按鍵,顯示從"0" 開始*/#i nclude int count1s; unsigned int count1m; unsigned char dis_bitcount=0; unsigned char display_o[6]; unsigned char displa
編程首要是要考慮程序的可行性,然后是可讀性、可移植性、健壯性以及可測試性。這是總則。但是很多人忽略了可讀性、可移植性和健壯性(可調(diào)試的方法可能歌不相同),這是不對(duì)的。1.當(dāng)項(xiàng)目比較大時(shí),最好分模塊編程,一
Segment Naming Conventions程序段命名約定Cx51編譯器生成的目標(biāo)(程序代碼,程序數(shù)據(jù)和常量數(shù)據(jù))都以程序段的形式存放,段是代碼和數(shù)據(jù)的單元。一個(gè)段可能是可重定位的,也可能地址是絕對(duì)的。每一個(gè)可重定位的段都
很多朋友都在想,怎么讓keil C51與ARM能夠并存使用。有安裝經(jīng)驗(yàn)的朋友都知道,安好C51后再安ARm,C51不能正常工作;安好ARM后再安C51,ARM不能正常工作.網(wǎng)上也有相關(guān)解決辦法,不過不怎么樣,要么不詳細(xì),要么就是復(fù)
一般的編譯器將函數(shù)中的區(qū)域變數(shù)動(dòng)態(tài)配置在stack,等函數(shù)結(jié)束空間就釋放出來。因?yàn)?051 的內(nèi)部記憶體很少,只有區(qū)區(qū)128 或256 bytes,而且stack 也是共用這塊記憶體。為了節(jié)省stack 空間,所以區(qū)域變數(shù)基本上是靜
前面的文章中介紹了 C 語言的基本數(shù)據(jù)類型,為了更有效的處理更復(fù)雜的數(shù)據(jù),C 語 言引入了構(gòu)造類型的數(shù)據(jù)類型。構(gòu)造類型就是將一批各種類型的數(shù)據(jù)放在一起形成一種特殊 類型的數(shù)據(jù)。之前討論過的數(shù)組也算是一種構(gòu)造類
深入理解并應(yīng)用C51對(duì)標(biāo)準(zhǔn)ANSIC的擴(kuò)展是學(xué)習(xí)C51的關(guān)鍵之一。因?yàn)榇蠖鄶?shù)擴(kuò)展功能都是直接針對(duì)8051系列CPU硬件的。大致有以下8類:8051存儲(chǔ)類型及存儲(chǔ)區(qū)域存儲(chǔ)模式存儲(chǔ)器類型聲明變量類型聲明位變量與位尋址特殊功能寄存
一、實(shí)現(xiàn)延時(shí)的兩種方法1、硬件延時(shí)優(yōu)點(diǎn):用到定時(shí)器/計(jì)數(shù)器,這種方法可以提高CPU的工作效率,也能做到精確延時(shí);缺點(diǎn):往往在精度要求不是很高時(shí),會(huì)使定時(shí)器/計(jì)數(shù)器大材小用,而且很極端時(shí),定時(shí)器根本不夠的。2、
#include #define uchar unsigned char#define uint unsigned int//延時(shí)子程序void mDelay(uchar Delay){ uchar i; for(;Delay>0;Delay--) { for(i=0;i
定義這樣的結(jié)構(gòu): typedef struct { uchar DC0_ALA:1; //電源0告警 uchar DC1_ALA:1; //電源1告警 uchar AC_ALA:1; //停電告警 uchar UN_H_ALA:1; //同頻信道機(jī)失鎖告警 uchar UN_L_ALA:1; //異頻信道機(jī)失鎖告警 uch