久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2115|回復: 19
打印 上一主題 下一主題
收起左側

單片機C程序報錯,編譯不通過error C129: missing ';' before 'P36_o_74f161_clr_n'

[復制鏈接]
跳轉到指定樓層
樓主
麻煩大家幫我檢查一下C程序,運行結果是這樣的
Build target 'Target 1'

Text3.c(3): warning C318: can't open file 'sfr.h'
Text3.c(4): warning C318: can't open file 'os.h'
TEXT3.C(7): error C129: missing ';' before 'P36_o_74f161_clr_n'
Target not created


// 8051單片機初始源程序
//
#include <sfr.h>
#include <os.h>
#include <stdlib.h>
#include <stdio.h>
_sfrbit P36_o_74f161_clr_n = _p3^6; //
_sfrbit P35_o_74f161_enp = _p3^5; //外部計數器F161有效(Enable)
_sfrbit P30_io_74hc393_clr_hold = _p3^0;  //外部計數器HC393復位/HOLD輸入
_sfrbit P37_i_prescaler = _p3^7; // 64分頻的預分頻器
//
//七段LED字形數據
// hgfedcba
#define DIG0 0xC0 // 11000000b ; 0 P2.0
#define DIG1 0xF9 // 11111001b ; 1 +-----a-----+
#define DIG2 0xA4 // 10100100b ; 2 | |
#define DIG3 0xB0 // 10110000b ; 3 P2.5 f b P2.1
#define DIG4 0x99 // 10011001b ; 4 | |
#define DIG5 0x92 // 10010010b ; 5 | P2.6 |
#define DIG6 0x82 // 10000010b ; 6 +-----g-----+
#define DIG7 0xD8 // 11011000b ; 7 | |
#define DIG8 0x80 // 10000000b ; 8 P2.4 e c P2.2
#define DIG9 0x98 // 10011000b ; 9 | |
// ; | P2.3 |
#define DIGM 0xBF // 10111111b ; - +-----d-----+ * h P2.7
#define DIGP 0x7F // 01111111b ; .
#define DIGB 0xFF // 11111111b ; "Blank"(“空白”)
//
const char segment_pattern[] = { DIG0, DIG1, DIG2,\
DIG3, DIG4, DIG5, DIG6, DIG7, DIG8, DIG9 };
//
const char segment_select[] = { 0xFE, 0xFD, 0xFB, \
0xF7, 0xEF, 0xDF, 0xBF, 0x7F };
//
unsigned long trailer;
unsigned long task;
unsigned int trimer;
unsigned char fnd[8];
unsigned char mfnd[8];
unsigned int int_state;
unsigned char fnd_state;
unsigned char boat;
bit hold;
//
//
void _interrupt IVN_TIMER1 time_base() {
//////////////////////////////////////////////
_tl1 = 0x60; _th1 = 0xF0; // 4000 2 M Sec 500 Times
//////////////////////////////////////////////
_p0 = 0xff;
_p2 = segment_select[fnd_state];
_p0 = fnd[fnd_state++];
fnd_state &= 0x07;
//////////////////////////////////////////////
if(int_state == 0) { //
P35_o_74f161_enp = 0; //外部計數器F161計數禁止
P30_io_74hc393_clr_hold = 1; //外部計數器HC393復位
P36_o_74f161_clr_n = 0; //外部計數器F161復位
_tl0 = 0x00; _th0 = 0x00; //內部計數器復位
hold = P30_io_74hc393_clr_hold; //  HOLD(保持)鍵狀態輸入
P36_o_74f161_clr_n = 1; // 外部計數器F161有效(Enable)
P30_io_74hc393_clr_hold = 0; //  外部計數器HC393有效(Enable)
P35_o_74f161_enp = 1; //  外部計數器F161進行計數
}
//////////////////////////////////////////////
if(int_state == 316) { //  10GHz狀態(64分頻的預分頻器)
if (!P37_i_prescaler) { //  門控時間為0.64秒
for (trimer = 0; trimer<202; trimer++) ; //  15個機器周期單位
// 測試信號24MHz輸入
boat++; // 15360000 用于顯示,需調整
boat++; //  延遲1個機器周期(12個時鐘周期)
boat++; // 15359988
boat++; // 15360000
// boat++; // 15360012
P35_o_74f161_enp = 0; //  外部計數器停止
trailer = _th0;
trailer = (trailer << 20) & 0x0ff00000;
task = _tl0;
task = (task << 12) & 0x000ff000;
trailer |= task;
task = _p3;
task = (task << 7) & 0x00000f00;
trailer |= task;
task = _p1 & 0x000000ff;
trailer |= task;
P35_o_74f161_enp = 1; // ?? ??? ???? ?????
// 電流消耗,
// 外部計數器將重新開始。
}
}
//////////////////////////////////////////////
if(int_state == 494) { // 100 MHz Mode 1 Sec Gate Time
if (P37_i_prescaler) { // 1 Sec Gate Time
for (trimer = 0; trimer<248; trimer++) ; //  15個機器周期單位
// 測試24MHz信號源輸入
boat++; // 24000000 用于顯示,需調整
boat++; //
boat++; //
boat++; //
boat++; //  延遲1個機器周期(12個時鐘周期)
boat++; // 23999988
boat++; // 24000000
// boat++; // 24000012

P35_o_74f161_enp = 0; // 外部計數器停止
trailer = _th0;
trailer = (trailer << 20) & 0x0ff00000;
task = _tl0;
task = (task << 12) & 0x000ff000;
trailer |= task;
task = _p3;
task = (task << 7) & 0x00000f00;
trailer |= task;
task = _p1 & 0x000000ff;
trailer |= task;
P35_o_74f161_enp = 1; // ?? ??? ???? ?????
// 電流消耗,以時間表
// 外部計數器重新開始。
}
}
//////////////////////////////////////////////
if(int_state == 506) { //  1Hz數字顯示
boat = trailer % 10;
mfnd[7] = segment_pattern[boat & 0xf];
trailer /= 10;
}
//////////////////////////////////////////////
if(int_state == 507) {
boat = trailer % 10;
mfnd[6] = segment_pattern[boat & 0xf];
trailer /= 10;
}
//////////////////////////////////////////////
if(int_state == 508) {
boat = trailer % 10;
mfnd[5] = segment_pattern[boat & 0xf];
trailer /= 10;
}
//////////////////////////////////////////////
if(int_state == 509) {
boat = trailer % 10;
mfnd[4] = segment_pattern[boat & 0xf];
trailer /= 10;
}
//////////////////////////////////////////////
if(int_state == 510) {
boat = trailer % 10;
mfnd[3] = segment_pattern[boat & 0xf];
trailer /= 10;
}
//////////////////////////////////////////////
if(int_state == 511) {
boat = trailer % 10;
mfnd[2] = segment_pattern[boat & 0xf];
trailer /= 10;
}
//////////////////////////////////////////////
if(int_state == 512) {
boat = trailer % 10;
mfnd[1] = segment_pattern[boat & 0xf];
trailer /= 10;
}
//////////////////////////////////////////////
if(int_state == 513) {
boat = trailer % 10;
mfnd[0] = segment_pattern[boat & 0xf];
trailer /= 10;
}
//////////////////////////////////////////////
int_state++;
//////////////////////////////////////////////
if(int_state >= 514) {
int_state = 0;
if (hold) {
fnd[0] = mfnd[0];
fnd[1] = mfnd[1];
fnd[2] = mfnd[2];
fnd[3] = mfnd[3];
fnd[4] = mfnd[4];
fnd[5] = mfnd[5];
fnd[6] = mfnd[6];
fnd[7] = mfnd[7];
if (P37_i_prescaler) {
fnd[1] &= 0x7F; // MHz點
} else {
fnd[0] &= 0x7F; // GHz點
}
}
}
//////////////////////////////////////////////
}
main()
{
_tmod = 0x15; // 0b00010101 Timer0 = Mode1, Counter, use TR0
// Timer1 = Mode1, Timer, use TR1
_tl0 = 0X0; _th0 = 0X0;
_tl1 = 0X0; _th1 = 0X0;
_tr0 = 1; // Timer 0 計數開始
_tr1 = 1; // Timer 1 計數開始
_et1 = 1; // 設置定時器1中斷狀態
_ea = 1; //    設置全局中斷狀態
while(1) ;
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:94031 發表于 2023-4-24 15:29 | 只看該作者
應該把 _sfrbit 改為 sbit
回復

使用道具 舉報

板凳
ID:655665 發表于 2023-4-24 15:43 | 只看該作者
xuyaqi 發表于 2023-4-24 15:29
應該把 _sfrbit 改為 sbit

謝謝大神, 剛試過了,還是一樣報錯.
回復

使用道具 舉報

地板
ID:883242 發表于 2023-4-24 15:48 | 只看該作者
趕腳不是Keil C51,更像是SDCC或IAR8051,問提供文件的人,到底用什么編譯器。
回復

使用道具 舉報

5#
ID:655665 發表于 2023-4-24 16:01 | 只看該作者
Hephaestus 發表于 2023-4-24 15:48
趕腳不是Keil C51,更像是SDCC或IAR8051,問提供文件的人,到底用什么編譯器。

源資料說使用Crossware 8051 C 編譯器
回復

使用道具 舉報

6#
ID:384109 發表于 2023-4-24 16:43 | 只看該作者
還是先解決找不到頭文件的問題吧
回復

使用道具 舉報

7#
ID:883242 發表于 2023-4-24 16:59 | 只看該作者
hmsd 發表于 2023-4-24 16:01
源資料說使用Crossware 8051 C 編譯器

那你就去找這個編譯器唄,用Keil只有死路一條。
回復

使用道具 舉報

8#
ID:655665 發表于 2023-4-24 17:07 | 只看該作者
人中狼 發表于 2023-4-24 16:43
還是先解決找不到頭文件的問題吧

兩個頭文件在網上找到了,但編譯時頭文件也抱錯.大神給看看頭文件有錯誤嗎.

os.h頭文件
/* Copyright (c) 2001 Crossware Associates */

/* Interrupt vector numbers */

/* Definitions for _interrupt n for Cygnal chips
*
* For example:  
*
*  void _interrupt IVN_TIMER1 Timer1InterruptHandler()
*  {
*  }
*
*/

#ifdef __C8051F02X

#define IVN_INTERRUPT0      0
#define IVN_TIMER0          1
#define IVN_INTERRUPT1      2
#define IVN_TIMER1          3
#define IVN_SERIALPORT      4
#define IVN_SERIALPORT0     4
#define IVN_TIMER2          5
#define IVN_SPI             6
#define IVN_SMBUS           7
#define IVN_ADC0WINDOW      8
#define IVN_PCA0            9
#define IVN_CP0FALLING      10
#define IVN_CP0RISING       11
#define IVN_CP1FALLING      12
#define IVN_CP1RISING       13
#define IVN_TIMER3          14
#define IVN_ADC0CONVERSION        15
#define IVN_TIMER4          16
#define IVN_ADC1CONVERSION  17
#define IVN_INTERRUPT6      18
#define IVN_INTERRUPT7      19
#define IVN_SERIALPORT1     20
#define IVN_OSC             21

#elif defined(__C8051F0XX)

#define IVN_INTERRUPT0      0
#define IVN_TIMER0          1
#define IVN_INTERRUPT1      2
#define IVN_TIMER1          3
#define IVN_SERIALPORT      4
#define IVN_SERIALPORT0     4
#define IVN_TIMER2          5
#define IVN_SPI             6
#define IVN_SMBUS           7
#define IVN_ADC0WINDOW      8
#define IVN_PCA0            9
#define IVN_CP0FALLING      10
#define IVN_CP0RISING       11
#define IVN_CP1FALLING      12
#define IVN_CP1RISING       13
#define IVN_TIMER3          14
#define IVN_ADC0CONVERSION        15
#define IVN_INTERRUPT4      16
#define IVN_INTERRUPT5      17
#define IVN_INTERRUPT6      18
#define IVN_INTERRUPT7      19
#define IVN_OSC             21

#elif defined(__C8051F2XX)

#define IVN_INTERRUPT0      0
#define IVN_TIMER0          1
#define IVN_INTERRUPT1      2
#define IVN_TIMER1          3
#define IVN_SERIALPORT      4
#define IVN_SERIALPORT0     4
#define IVN_TIMER2          5
#define IVN_SPI             6
#define IVN_ADC0WINDOW      8
#define IVN_CP0FALLING      10
#define IVN_CP0RISING       11
#define IVN_CP1FALLING      12
#define IVN_CP1RISING       13
#define IVN_ADC0CONVERSION        15
#define IVN_INTERRUPT4      16
#define IVN_INTERRUPT5      17
#define IVN_INTERRUPT6      18
#define IVN_INTERRUPT7      19
#define IVN_OSC             21

#elif defined(__C8051F31X)

#define IVN_INTERRUPT0      0
#define IVN_TIMER0          1
#define IVN_INTERRUPT1      2
#define IVN_TIMER1          3
#define IVN_SERIALPORT      4
#define IVN_SERIALPORT0     4
#define IVN_TIMER2          5
#define IVN_SPI             6
#define IVN_SMBUS           7
#define IVN_ADC0WINDOW      9
#define IVN_ADC0CONVERSION        10
#define IVN_PCA0            11
#define IVN_CP0             12
#define IVN_CP1             13
#define IVN_TIMER3          14

#elif defined(__C8051F32X)

#define IVN_INTERRUPT0      0
#define IVN_TIMER0          1
#define IVN_INTERRUPT1      2
#define IVN_TIMER1          3
#define IVN_SERIALPORT      4
#define IVN_SERIALPORT0     4
#define IVN_TIMER2          5
#define IVN_SPI             6
#define IVN_SMBUS           7
#define IVN_USB             8
#define IVN_ADC0WINDOW      9
#define IVN_ADC0CONVERSION        10
#define IVN_PCA0            11
#define IVN_CP0             12
#define IVN_CP1             13
#define IVN_TIMER3          14
#define IVN_VBUS_LEVEL      15

#elif defined(__C8051F3XX)

#define IVN_INTERRUPT0      0
#define IVN_TIMER0          1
#define IVN_INTERRUPT1      2
#define IVN_TIMER1          3
#define IVN_SERIALPORT      4
#define IVN_SERIALPORT0     4
#define IVN_TIMER2          5
#define IVN_SMBUS           6
#define IVN_ADC0WINDOW      7
#define IVN_ADC0CONVERSION        8
#define IVN_PCA0            9
#define IVN_CP0FALLING      10
#define IVN_CP0RISING       11

#else

#error        No appropriate variant defined

#endif
-------------------------------------
sfr.h頭文件
系統頭文件(sfr.h)
REG51.H

Header file for generic 80C51 and 80C31 microcontroller.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/

#ifndef __REG51_H__
#define __REG51_H__

typedef unsigned char uint8;
typedef unsigned short int uint16;
typedef unsigned int uint32;

/* BYTE Register */
sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
sfr PSW = 0xD0;
sfr ACC = 0xE0;
sfr B = 0xF0;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
sfr IE = 0xA8;
sfr IP = 0xB8;
sfr SCON = 0x98;
sfr SBUF = 0x99;

/* BIT Register */
/* PSW */
sbit CY = 0xD7;
sbit AC = 0xD6;
sbit F0 = 0xD5;
sbit RS1 = 0xD4;
sbit RS0 = 0xD3;
sbit OV = 0xD2;
sbit P = 0xD0;

/* TCON */
sbit TF1 = 0x8F;
sbit TR1 = 0x8E;
sbit TF0 = 0x8D;
sbit TR0 = 0x8C;
sbit IE1 = 0x8B;
sbit IT1 = 0x8A;
sbit IE0 = 0x89;
sbit IT0 = 0x88;

/* IE */
sbit EA = 0xAF;
sbit ES = 0xAC;
sbit ET1 = 0xAB;
sbit EX1 = 0xAA;
sbit ET0 = 0xA9;
sbit EX0 = 0xA8;

/* IP */
sbit PS = 0xBC;
sbit PT1 = 0xBB;
sbit PX1 = 0xBA;
sbit PT0 = 0xB9;
sbit PX0 = 0xB8;

/* P3 */
sbit RD = 0xB7;
sbit WR = 0xB6;
sbit T1 = 0xB5;
sbit T0 = 0xB4;
sbit INT1 = 0xB3;
sbit INT0 = 0xB2;
sbit TXD = 0xB1;
sbit RXD = 0xB0;

/* SCON */
sbit SM0 = 0x9F;
sbit SM1 = 0x9E;
sbit SM2 = 0x9D;
sbit REN = 0x9C;
sbit TB8 = 0x9B;
sbit RB8 = 0x9A;
sbit TI = 0x99;
sbit RI = 0x98;

#endif







回復

使用道具 舉報

9#
ID:655665 發表于 2023-4-24 17:11 | 只看該作者
Hephaestus 發表于 2023-4-24 16:59
那你就去找這個編譯器唄,用Keil只有死路一條。

這個編譯器是有的,不過已經過期了不能用了.也沒有新版本.
回復

使用道具 舉報

10#
ID:655665 發表于 2023-4-24 17:28 | 只看該作者
人中狼 發表于 2023-4-24 16:43
還是先解決找不到頭文件的問題吧

兩個頭文件sfr.h  os.h找到了,編譯時頭文件os.h也報錯.
回復

使用道具 舉報

11#
ID:155507 發表于 2023-4-24 18:09 | 只看該作者
hmsd 發表于 2023-4-24 17:28
兩個頭文件sfr.h  os.h找到了,編譯時頭文件os.h也報錯.

你貼出來,我們替你想辦法解決掉啊。
回復

使用道具 舉報

12#
ID:655665 發表于 2023-4-24 18:17 | 只看該作者
angmall 發表于 2023-4-24 18:09
你貼出來,我們替你想辦法解決掉啊。

os.h頭文件
//系統頭文件(os.h)
#include"c8051f.h"
#include"OS_INIT_SP.H" //系統初始化頭文件
#include"Init_Task.h"
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
#define SYSCLK 11059200   //晶振頻率
#define SYTIMEISR 50    //系統時鐘中斷時間(ms)
#define NULL (void *)0L
#define OK 1

/*任務狀態*/
#define WAIT_MSG 0X00      
#define WAIT_TIME 0X01
#define READY 0X02  
#define TEST 1   //測試代碼條件編譯

/*任務表*/
typedef struct task_b
{
uchar xdata *sp_start;  //任務堆棧底指針
uchar sp_size;          //任務堆棧長度
uchar flg;              //任務狀態
//uchar prio;           //任務指針
//struct task_msg *msg ; //任務接收消息結構體指針
uchar timedal;                //任務掛起延遲時間
}task_link;
extern task_link xdata OSPCB[N+1]; //TASK zhuang tai link


/*操作系統全局變量*/
extern uchar data Prio;     //當前運行的任務優先級
extern uchar data *spend;   //系統堆棧底指針
extern uchar data ISR_num;   //中斷嵌套次數
extern uchar data OSRdyGrp;   //任務就緒表全局變量
extern uchar data OSRdyTab[TASK_8N];//任務優先級表1
extern uchar code OSMapTab[8];      //任務優先級表2
extern uchar code OSUnMapTab[256];  //任務優先級表3


/*操作系統全局函數*/
extern void Task_Init(uchar i,void(*addr)(void),uchar xdata *Task_sta);//系統初始化函數
extern void OS_RdyTask(uchar prio);         //使一個任務就緒
extern void OSTask_TimeDal(uchar TimeDal);  //使一個任務時間延遲
extern void OSISR_Task_Sched(void);         //切換任務函數
extern void OSInit_task();                  //任務堆棧初始化
回復

使用道具 舉報

13#
ID:883242 發表于 2023-4-24 18:23 | 只看該作者
hmsd 發表于 2023-4-24 17:11
這個編譯器是有的,不過已經過期了不能用了.也沒有新版本.

版本新了可能還不好用,過期好辦,放虛擬機里面運行,給個假時間就可以了。
回復

使用道具 舉報

14#
ID:655665 發表于 2023-4-24 18:32 | 只看該作者
angmall 發表于 2023-4-24 18:09
你貼出來,我們替你想辦法解決掉啊。

000.jpg (155.13 KB, 下載次數: 74)

000.jpg
回復

使用道具 舉報

15#
ID:155507 發表于 2023-4-24 18:43 | 只看該作者
你這個是韓的頻率計
8051內部16比特計數器及外部12比特(其中74F161 4比特, 74HC393 8比特)共 28 比特計數器,8位數字顯示100MHz頻率計數器。
回復

使用道具 舉報

16#
ID:155507 發表于 2023-4-24 18:47 | 只看該作者
你這個是韓的頻率計 開源的基于C51的頻率計100兆赫頻率計數器/脈沖計數器
本機為使用8051的8位100MHz的頻率計數器。
8051內部16比特計數器及外部12比特(其中74F161 4比特, 74HC393 8比特)共 28 比特計數器,8位數字顯示100MHz頻率計數器。

51hei3.gif (25.12 KB, 下載次數: 84)

51hei3.gif

51hei1.gif (29.02 KB, 下載次數: 79)

51hei1.gif

51hei2.gif (23.44 KB, 下載次數: 87)

51hei2.gif

51hei0.gif (23.53 KB, 下載次數: 82)

51hei0.gif
回復

使用道具 舉報

17#
ID:655665 發表于 2023-4-24 18:48 | 只看該作者
Hephaestus 發表于 2023-4-24 18:23
版本新了可能還不好用,過期好辦,放虛擬機里面運行,給個假時間就可以了。

我把程序放上來,大神看看能不能編譯

Crossware 8051 C 編譯器.rar

10.93 MB, 下載次數: 4

回復

使用道具 舉報

18#
ID:655665 發表于 2023-4-24 18:53 | 只看該作者
angmall 發表于 2023-4-24 18:47
你這個是的頻率計 開源的基于C51的頻率計100兆赫頻率計數器/脈沖計數器
本機為使用8051的8位100MHz的 ...

是的,基于C51的頻率計100兆赫頻率計,就是想編譯一下固件.
回復

使用道具 舉報

19#
ID:155507 發表于 2023-4-24 21:06 | 只看該作者

給你改了一下試試






  1. //#include <sfr.h>
  2. //#include <os.h>
  3. #include <reg52.h>
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. sbit P36_o_74f161_clr_n      = P3^6; //外部計數器F161復位
  7. sbit P35_o_74f161_enp        = P3^5; //外部計數器F161有效(Enable)
  8. sbit P30_io_74hc393_clr_hold = P3^0; //外部計數器HC393復位/HOLD輸入
  9. sbit P37_i_prescaler         = P3^7; // 64分頻的預分頻器
  10. //
  11. //七段LED字形數據
  12. // hgfedcba
  13. #define DIG0 0xC0 // 11000000b ; 0 P2.0
  14. #define DIG1 0xF9 // 11111001b ; 1 +-----a-----+
  15. #define DIG2 0xA4 // 10100100b ; 2 | |
  16. #define DIG3 0xB0 // 10110000b ; 3 P2.5 f b P2.1
  17. #define DIG4 0x99 // 10011001b ; 4 | |
  18. #define DIG5 0x92 // 10010010b ; 5 | P2.6 |
  19. #define DIG6 0x82 // 10000010b ; 6 +-----g-----+
  20. #define DIG7 0xD8 // 11011000b ; 7 | |
  21. #define DIG8 0x80 // 10000000b ; 8 P2.4 e c P2.2
  22. #define DIG9 0x98 // 10011000b ; 9 | |
  23. // ; | P2.3 |
  24. #define DIGM 0xBF // 10111111b ; - +-----d-----+ * h P2.7
  25. #define DIGP 0x7F // 01111111b ; .
  26. #define DIGB 0xFF // 11111111b ; "Blank"(“空白”)
  27. //
  28. code char segment_pattern[] = { DIG0, DIG1, DIG2,\
  29. DIG3, DIG4, DIG5, DIG6, DIG7, DIG8, DIG9 };
  30. //
  31. code char segment_select[] = { 0xFE, 0xFD, 0xFB, \
  32. 0xF7, 0xEF, 0xDF, 0xBF, 0x7F };
  33. //
  34. unsigned long trailer;
  35. unsigned long task;
  36. unsigned int trimer;
  37. unsigned char fnd[8];
  38. unsigned char mfnd[8];
  39. unsigned int int_state;
  40. unsigned char fnd_state;
  41. unsigned char boat;
  42. bit hold;
  43. //
  44. //
  45. //void _interrupt IVN_TIMER1 time_base() {
  46. void time_base()  interrupt 3
  47. {
  48.         //////////////////////////////////////////////
  49.         TL1 = 0x60; TH1 = 0xF0; // 4000 2 M Sec 500 Times
  50.         //////////////////////////////////////////////
  51.         P0 = 0xff;
  52.         P2 = segment_select[fnd_state];
  53.         P0 = fnd[fnd_state++];
  54.         fnd_state &= 0x07;
  55.         //////////////////////////////////////////////
  56.         if(int_state == 0) { //
  57.                 P35_o_74f161_enp = 0; //外部計數器F161計數禁止
  58.                 P30_io_74hc393_clr_hold = 1; //外部計數器HC393復位
  59.                 P36_o_74f161_clr_n = 0; //外部計數器F161復位
  60.                 TL0 = 0x00; TH0 = 0x00; //內部計數器復位
  61.                 hold = P30_io_74hc393_clr_hold; //  HOLD(保持)鍵狀態輸入
  62.                 P36_o_74f161_clr_n = 1; // 外部計數器F161有效(Enable)
  63.                 P30_io_74hc393_clr_hold = 0; //  外部計數器HC393有效(Enable)
  64.                 P35_o_74f161_enp = 1; //  外部計數器F161進行計數
  65.         }
  66.         //////////////////////////////////////////////
  67.         if(int_state == 316) { //  10GHz狀態(64分頻的預分頻器)
  68.                 if (!P37_i_prescaler) { //  門控時間為0.64秒
  69.                         for (trimer = 0; trimer<202; trimer++) ; //  15個機器周期單位
  70.                         // 測試信號24MHz輸入
  71.                         boat++; // 15360000 用于顯示,需調整
  72.                         boat++; //  延遲1個機器周期(12個時鐘周期)
  73.                         boat++; // 15359988
  74.                         boat++; // 15360000
  75.                         // boat++; // 15360012
  76.                         P35_o_74f161_enp = 0; //  外部計數器停止
  77.                         trailer = TH0;
  78.                         trailer = (trailer << 20) & 0x0ff00000;
  79.                         task = TL0;
  80.                         task = (task << 12) & 0x000ff000;
  81.                         trailer |= task;
  82.                         task = P3;
  83.                         task = (task << 7) & 0x00000f00;
  84.                         trailer |= task;
  85.                         task = P1 & 0x000000ff;
  86.                         trailer |= task;
  87.                         P35_o_74f161_enp = 1; // 소비 전류가 일정하게 하기위하여
  88.                         // 電流消耗,
  89.                         // 外部計數器將重新開始。
  90.                 }
  91.         }
  92.         //////////////////////////////////////////////
  93.         if(int_state == 494) { // 100 MHz Mode 1 Sec Gate Time
  94.                 if (P37_i_prescaler) { // 1 Sec Gate Time
  95.                         for (trimer = 0; trimer<248; trimer++) ; //  15個機器周期單位
  96.                         // 測試24MHz信號源輸入
  97.                         boat++; // 24000000 用于顯示,需調整
  98.                         boat++; //
  99.                         boat++; //
  100.                         boat++; //
  101.                         boat++; //  延遲1個機器周期(12個時鐘周期)
  102.                         boat++; // 23999988
  103.                         boat++; // 24000000
  104.                         // boat++; // 24000012

  105.                         P35_o_74f161_enp = 0; // 外部計數器停止
  106.                         trailer = TH0;
  107.                         trailer = (trailer << 20) & 0x0ff00000;
  108.                         task = TL0;
  109.                         task = (task << 12) & 0x000ff000;
  110.                         trailer |= task;
  111.                         task = P3;
  112.                         task = (task << 7) & 0x00000f00;
  113.                         trailer |= task;
  114.                         task = P1 & 0x000000ff;
  115.                         trailer |= task;
  116.                         P35_o_74f161_enp = 1; // 소비 전류가 일정하게 하기위하여
  117.                         // 電流消耗,以時間表
  118.                         // 外部計數器重新開始。
  119.                 }
  120.         }
  121.         //////////////////////////////////////////////
  122.         if(int_state == 506) { //  1Hz數字顯示
  123.                 boat = trailer % 10;
  124.                 mfnd[7] = segment_pattern[boat & 0xf];
  125.                 trailer /= 10;
  126.         }
  127.         //////////////////////////////////////////////
  128.         if(int_state == 507) {
  129.                 boat = trailer % 10;
  130.                 mfnd[6] = segment_pattern[boat & 0xf];
  131.                 trailer /= 10;
  132.         }
  133.         //////////////////////////////////////////////
  134.         if(int_state == 508) {
  135.                 boat = trailer % 10;
  136.                 mfnd[5] = segment_pattern[boat & 0xf];
  137.                 trailer /= 10;
  138.         }
  139.         //////////////////////////////////////////////
  140.         if(int_state == 509) {
  141.                 boat = trailer % 10;
  142.                 mfnd[4] = segment_pattern[boat & 0xf];
  143.                 trailer /= 10;
  144.         }
  145.         //////////////////////////////////////////////
  146.         if(int_state == 510) {
  147.                 boat = trailer % 10;
  148.                 mfnd[3] = segment_pattern[boat & 0xf];
  149.                 trailer /= 10;
  150.         }
  151.         //////////////////////////////////////////////
  152.         if(int_state == 511) {
  153.                 boat = trailer % 10;
  154.                 mfnd[2] = segment_pattern[boat & 0xf];
  155.                 trailer /= 10;
  156.         }
  157.         //////////////////////////////////////////////
  158.         if(int_state == 512) {
  159.                 boat = trailer % 10;
  160.                 mfnd[1] = segment_pattern[boat & 0xf];
  161.                 trailer /= 10;
  162.         }
  163.         //////////////////////////////////////////////
  164.         if(int_state == 513) {
  165.                 boat = trailer % 10;
  166.                 mfnd[0] = segment_pattern[boat & 0xf];
  167.                 trailer /= 10;
  168.         }
  169.         //////////////////////////////////////////////
  170.         int_state++;
  171.         //////////////////////////////////////////////
  172.         if(int_state >= 514) {
  173.                 int_state = 0;
  174.                 if (hold) {
  175.                         fnd[0] = mfnd[0];
  176.                         fnd[1] = mfnd[1];
  177.                         fnd[2] = mfnd[2];
  178.                         fnd[3] = mfnd[3];
  179.                         fnd[4] = mfnd[4];
  180.                         fnd[5] = mfnd[5];
  181.                         fnd[6] = mfnd[6];
  182.                         fnd[7] = mfnd[7];
  183.                         if (P37_i_prescaler) {
  184.                                 fnd[1] &= 0x7F; // MHz點
  185.                         } else {
  186.                                 fnd[0] &= 0x7F; // GHz點
  187.                         }
  188.                 }
  189.         }
  190.         //////////////////////////////////////////////
  191. }
  192. void main()
  193. {
  194.         TMOD = 0x15; // 0b00010101 Timer0 = Mode1, Counter, use TR0
  195.         // Timer1 = Mode1, Timer, use TR1
  196.         TL0 = 0X00; TH0 = 0X00;
  197.         TL1 = 0X00; TH1 = 0X00;
  198.         TR0 = 1; // Timer 0 計數開始
  199.         TR1 = 1; // Timer 1 計數開始
  200.         ET1 = 1; // 設置定時器1中斷狀態
  201.         EA = 1; //    設置全局中斷狀態
  202.         while(1) ;
  203. }
復制代碼



評分

參與人數 1黑幣 +10 收起 理由
hmsd + 10 很給力!

查看全部評分

回復

使用道具 舉報

20#
ID:655665 發表于 2023-4-25 08:12 | 只看該作者
angmall 發表于 2023-4-24 21:06
給你改了一下試試

謝謝大神, 編譯通過了.
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: www.日本精品 | 黄瓜av | 国产精彩视频一区 | 91一区二区 | 日韩视频 中文字幕 | 日韩一区二区三区在线播放 | 久久久久久www | 午夜影院在线观看 | 黄色在线免费网站 | 91在线视频播放 | 久久国产精99精产国高潮 | 91久操视频 | 国产精品免费av | 国产特级毛片 | 第一色在线 | 99免费| 中文字幕成人在线 | 成人免费视频网 | 国产精品一区久久久久 | 日韩亚洲欧美一区 | 日韩三级视频 | 在线观看免费观看在线91 | 欧洲精品一区 | 毛片久久久 | 日韩中文字幕在线视频观看 | 国产日韩欧美在线观看 | 国产精品爱久久久久久久 | 中文一区二区 | 国产视频一视频二 | 免费毛片www com cn | 日韩一区二区在线看 | 亚洲精品一区二区三区蜜桃久 | 国产一区二区三区在线 | 黄色免费三级 | 日韩精品免费在线观看 | 国产黄色网址在线观看 | 日韩精品免费在线观看 | 中文字幕在线一区二区三区 | 亚洲成人网在线播放 | 黄色三级毛片 | 日韩成人在线一区 |