当前位置: 首页 > news >正文

8088单板机完整测试

1.图纸2.代码#define IO1 0x0600 #define IO2 0x0400 #define IO3 0x0600 #define ADR_244 IO3 #define AD0808 0X50C //LCD Registers addresses #define LCD_CMD_WR (IO10x00) #define LCD_DATA_WR (IO10x02) #define LCD_BUSY_RD (IO10x04) #define LCD_DATA_RD (IO10x06) /* 可编程定时/计数器接口8253A */ #define ADR_TIMER_CONTROL (IO2 0x06) #define ADR_TIMER_DATA0 (IO2 0x00) #define ADR_TIMER_DATA1 (IO2 0x02) #define ADR_TIMER_DATA2 (IO2 0x04) #define TIMER_COUNTER0 0x00 #define TIMER_COUNTER1 0x40 #define TIMER_COUNTER2 0x80 #define TIMER_LATCH 0x00 #define TIMER_LSB 0x10 #define TIMER_MSB 0x20 #define TIMER_LSB_MSB 0x30 #define TIMER_MODE0 0x00 #define TIMER_MODE1 0x02 #define TIMER_MODE2 0x04 #define TIMER_MODE3 0x06 #define TIMER_MODE4 0x08 #define TIMER_MODE5 0x09 #define TIMER_BCD 0x01 unsigned char Str1[] AD0808 Test ; unsigned char Str2[]Set ; unsigned char Str3[] ------------ ; unsigned char HMS_String[] 1.25 V ; unsigned char Hour12,Minute30,Second0; unsigned char Settime; unsigned char Change_H_or_M1; void outp(unsigned int addr, char data) // 输出一字节到I/O端口 { __asm { mov dx, addr mov al, data out dx, al } } char inp(unsigned int addr) // 从I/O端口输入一字节 { char result; __asm { mov dx, addr in al, dx mov result, al } return result; } //设置中断失量表 void set_int(unsigned char int_no, void * service_proc) { _asm { push es xor ax, ax mov es, ax mov al, int_no xor ah, ah shl ax, 1 shl ax, 1 mov si, ax mov ax, service_proc mov es:[si], ax inc si inc si mov bx, cs mov es:[si], bx pop es } } //中断处理函数 /* void _interrupt _far nmi_handler(void) { if(Second60) { Second0; if(Minute60) { Minute0; if(Hour24) { Hour0;Minute0;Second0; } } } } void setup_nmi(void) // 在中断失量表添加2号中断失量 { set_int(0x02, (void *)nmi_handler); // 设置8253A定时/计数器 outp(ADR_TIMER_CONTROL, TIMER_COUNTER0 | TIMER_MODE3 | TIMER_LSB_MSB|TIMER_BCD); outp(ADR_TIMER_DATA0, 0x00); outp(ADR_TIMER_DATA0, 0x01); outp(ADR_TIMER_CONTROL, TIMER_COUNTER2 | TIMER_MODE2 | TIMER_LSB_MSB|TIMER_BCD); outp(ADR_TIMER_DATA2, 0x00); outp(ADR_TIMER_DATA2, 0x10); } */ //LCD忙等待 void WaitForEnable( void ) { unsigned char result; do{ resultinp(LCD_BUSY_RD); }while(result0x80); } //LCD写命令 void LcdWriteCommand( unsigned char cmd) { WaitForEnable(); outp(LCD_CMD_WR,cmd); } //LCD写数据 void LcdWriteData( char data ) { WaitForEnable(); outp(LCD_DATA_WR,data); } void LcdReset( void ) { LcdWriteCommand( 0x38); LcdWriteCommand( 0x0c); LcdWriteCommand( 0x06); LcdWriteCommand( 0x01); } void lcd_pos(unsigned char pos) { LcdWriteCommand( pos|0x80); } void lcd_out(unsigned char *row) { unsigned char *p; prow; while(*p!\0) { LcdWriteData(*p); p; } } void delay(unsigned int x) {unsigned char i; while(x--) {for(i0; i120;i){}} } //时分秒转换为字符串 void hms_str(unsigned char h,unsigned char m,unsigned char s) { HMS_String[4]h/100; HMS_String[5]h%100; HMS_String[7]m/100; HMS_String[8]m%100; HMS_String[10]s/100; HMS_String[11]s%100; } //调整时间 void Change_Time() { Settime0; if(inp(ADR_244)!0x0f) { lcd_pos(0x00); lcd_out(Str2); Settime1; } while(Settime) { if(!(inp(ADR_244)0x01)) { while(!(inp(ADR_244)0x01)){} Change_H_or_M!Change_H_or_M; if(!Change_H_or_M) {Str2[4] ;Str2[5] ;Str2[7];Str2[8];} else {Str2[4];Str2[5];Str2[7] ;Str2[8] ;} lcd_pos(0x00);lcd_out(Str2); } if(!(inp(ADR_244)0x02)) { while(!(inp(ADR_244)0x02)){} if(Change_H_or_M1) {if(Hour24)Hour0;} else {if(Minute60)Minute0;} } if(!(inp(ADR_244)0x04)) { while(!(inp(ADR_244)0x04)){} if(Change_H_or_M1) {if(--Hour0xff)Hour23;} else {if(--Minute0xff)Minute59;} } if(!(inp(ADR_244)0x08)) { while(!(inp(ADR_244)0x08)){} lcd_pos(0x00); lcd_out(Str1); Settime0; } hms_str(Hour,Minute,Second); lcd_pos(0x40); lcd_out(HMS_String); } } unsigned char ad_result123; void ad_result_tostring(unsigned char ad) { //adad*125/100; unsigned int voltage(unsigned int)ad*100/256*9/2; HMS_String[4]voltage/1000; HMS_String[5].; HMS_String[6](voltage%100)/100; HMS_String[7]voltage%100; HMS_String[8] ; HMS_String[9]V; } int main_sin(void); #define DY1_PORT 0x504 #define DY2_PORT 0x506 char segTable[10] {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; void disp() { static int i0; //for(i0;i5000;i); // for(i0;i5000;i); outp(DY1_PORT, segTable[i]); outp(DY2_PORT, segTable[i]); if(i9) { i0; } } void main(void) { // setup_nmi(); int i; unsigned char led_state0; LcdReset(); lcd_pos(0x00); lcd_out(Str1); lcd_pos(0x40); ad_result_tostring(ad_result); lcd_out(HMS_String); // main_sin(); while(1) { outp(AD0808,0x00);//start AD0808 conversion for(i0;i100;i); ad_resultinp(AD0808);//read AD0808 conversion result ad_result_tostring(ad_result); lcd_pos(0x40); lcd_out(HMS_String); // i; // if(i1000) // {i0; outp(0x800,0x00); delay(100); lcd_pos(0x00); lcd_out(Str1); outp(0x800,0xff); delay(100); //lcd_pos(0x00); //lcd_out(Str3); disp(); // led_state~led_state; // } } //*/ //main_sin(); while(1) { //hms_str(Hour,Minute,Second); //ad_resultinp(AD0808);//read AD0808 conversion result //ad_result_tostring(ad_result); lcd_pos(0x40); lcd_out(HMS_String); outp(0x800,0xff); delay(100); // LcdReset(); lcd_pos(0x00); lcd_out(Str1); outp(0x800,0x00); delay(100); outp(0x600,0xff); outp(AD0808,0x00);//start AD0808 conversion //for(i0;i10;i); delay(100); delay(100); outp(AD0808,0x00);//start AD0808 conversion for(i0;i100;i); ad_resultinp(AD0808);//read AD0808 conversion result ad_result_tostring(ad_result); lcd_pos(0x40); lcd_out(HMS_String); // delay(100); //Change_Time(); } } /* 直接端口输出宏 */ //#define outportb(port, val) __asm { mov dx, port ; mov al, val ; out dx, al } void delay100(void) { int i, j; for (i0;i2;i) { for (j 0; j 2; j); } // /* 空循环 */; } int main_sin(void) { unsigned char al; unsigned int port 0x508; while (1) { al 0; do { outp(port, al); //delay100(); } while (al ! 0xFF); do { outp(port, al); //delay100(); } while (--al ! 0x00); } return 0; } char end_flag[5]{0x55,0x55,0x55,0x55,0x55};3.测试
http://www.rkmt.cn/news/1366753.html

相关文章:

  • 基于IMPLY逻辑的近似全加器设计:存内计算与近似计算的融合实践
  • 终极指南:5分钟掌握免费智能DLSS管理工具
  • 突破防火墙限制:使用tracetcp进行TCP路由追踪的专业指南
  • Obsidian PDF导出终极指南:从零开始掌握Better Export PDF插件的完整教程
  • 终极免费桌面整理方案:NoFences让Windows桌面焕然一新
  • AI开发进阶⑤:多模态Agent实战——让AI能看见和操作
  • 终极指南:如何在现代Windows系统上使用IPXWrapper实现经典游戏联机对战
  • ECDICT:150万词汇量开源词典数据库 - 打造高效本地语言服务终极指南
  • TimesFM时间序列预测:5个实战优化技巧让你的模型性能翻倍
  • 终极GIF优化指南:用Gifsicle让动画文件缩小50%
  • 突破遥感小目标检测瓶颈!空间 - 通道协同注意力多尺度检测网络重磅发布
  • N_m3u8DL-RE深度解析:5大高效流媒体下载技巧与进阶实战手册
  • 终极解决方案:如何一次性安装所有Visual C++运行库解决Windows软件兼容性问题
  • 你的网易云音乐为什么还不够好用?解锁PC版终极改造方案
  • Steam创意工坊模组跨平台下载解决方案:WorkshopDL为多平台玩家提供模组自由
  • 内容创作团队如何利用多模型聚合提升稿件生成效率与质量
  • 怎样高效处理游戏资源:LSLib专业游戏MOD制作工具完全指南
  • unluac:Lua字节码反编译的终极解决方案
  • 解放双手!淘宝淘金币自动化脚本终极指南:每天5分钟搞定所有任务
  • 如何5分钟完成SQLite到MySQL数据库迁移:智能转换工具完整指南
  • AMD Ryzen终极性能调试指南:7步掌握硬件底层控制
  • 5分钟找回遗忘的Navicat密码:免费开源工具终极指南
  • 基于机器学习的工业物联网边缘安全:树莓派部署轻量级MQTT入侵检测系统
  • 告别熬夜改 PPT!okbiye AI PPT,毕业论文答辩的 “救场神器”
  • 基于随机森林的物联网入侵检测系统构建与优化实践
  • 2026年京东云OpenClaw/Hermes Agent配置Token Plan搭建保姆分享
  • HS2-HF_Patch汉化补丁:5分钟解锁Honey Select 2完整中文体验
  • 蓝奏云API完整指南:三步实现文件直链解析的终极方案
  • 抖音音频下载终极指南:3分钟掌握无损音乐批量提取技巧
  • 哨位越界、营区窜动预警:无感定位实现 UWB 无法企及的无痕迹安防