?? com.c
字號:
#define DEBUG 0
#include <bios.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
/**************Below is used in bioscom() ***************************************
#define com1 0
#define com2 1
#define com_init 0
#define com_send 1
#define com_receive 2
#define com_status 3
#define baud110 0x0
#define baud150 0x20
#define baud300 0x40
#define baud600 0x60
#define baud1200 0x80
#define baud2400 0xa0
#define baud4800 0xc0
#define baud9600 0xe0
#define parityNone 0x0
#define parityOdd 0x08
#define parityEven 0x18
#define data5 0x0
#define data6 0x1
#define data7 0x2
#define data8 0x3
#define stop1 0x0
#define stop2 0x4
#define readyReceive 0x100
#define readySend 0x2000
******************************** Above is used in bioscom() *******************/
#define Clock (1843200L) /* UART8250 參考計時頻率 */
#define THR 0
#define RDR 0
#define IER 1
#define IIR 2
#define LCR 3
#define MCR 4
#define LSR 5
#define MSR 6
#define BRDL 0
#define BRDH 1
int printf_flag='h';
int printf_flag2 ;
#define None 0x0
#define Odd 0x1
#define Even 0x2
#define Mark 0x3
#define Space 0x4
long baud;
int com;
int base;
int data;
int stop;
int parity;
void send_now()
{
char buffer[512];
int len,i;
printf("\nEnter: ");
gets(buffer);
len=strlen(buffer);
for(i=0;i<len;i++){
while(((inportb(base+LSR))&0x40)==0);
outportb(base,buffer[i]);
}
while(((inportb(base+LSR))&0x40)==0);
outportb(base,0xd);
while(((inportb(base+LSR))&0x40)==0);
outportb(base,0xa);
}
void send_file()
{
char file[128];
FILE *fp;
char c;
printf("\nFile name: ");
scanf("%s",file);
fp=fopen(file,"rb");
if(fp==NULL){printf("File not found!"); getch(); return; }
printf("Sending......");
while(!feof(fp)){
fscanf(fp,"%c",&c);
while(((inportb(base+LSR))&0x40)==0);
outportb(base,c);
}
printf("Transfer finished.\n");
fclose(fp);
}
help()
{
clrscr();
printf("Ver-2007.11.14\n\n");
printf("Command List:\n");
printf("-------------------------------------");
printf("\nA\tASCII\nH\tHex\nEnter\tNew line\n");
printf("P\tPause\nC\tClear Screen\nD\tDisplay COMn configuration\n");
printf("S\tSet COMn\n?\tThis message\n");
printf("I\tInput characters to send\n");
printf("X\tSend a file\n");
printf("N\tName the receive file\n");
printf("1\tOpen COM1\n2\tOpen COM2\n3\tOpen COM3\n4\tOpen COM4\n");
printf("Q\tQuit Program(Upper available)\n");
printf("-------------------------------------\n");
}
set(int c)
{
char temp_char;
unsigned char buffer[16];
long clock=Clock/16;
int flag=1;
switch(c){
case 1: com=1; base=0x3f8;initcom(); return;
case 2: com=2; base=0x2f8;initcom(); return;
case 3: com=3; base=0x3e8;initcom(); return;
case 4: com=4; base=0x2e8;initcom(); return;
}
clrscr();
printf("\n\n\n\nSet Serial port:\n");
printf("------------------------------------\n");
while(flag){
printf("Please input COM[n]:\t\t%d\b",com);
temp_char=getche();
if(temp_char==0x1b){printf("\n"); return;}
else if(temp_char=='\r'){printf("\n"); break;}
putch(temp_char);
com=temp_char-0x30;
if(com<1 || com>4)printf("Error: 1~4 is available !\n");
else flag=0;
} flag=1;
while(flag){
printf("Port Address");
switch(com)
{
case 1: printf("[0x3f8]:\t\t");
base=0x3f8;
break;
case 2: printf("[0x2f8]:\t\t");
base=0x2f8;
break;
case 3: printf("[0x3e8]:\t\t");
base=0x3e8;
break;
case 4: printf("[0x2e8]:\t\t");
base=0x2e8;
break;
}
scanf("%x",&base);
flag=0;
}flag=1;
while(flag){
printf("Please input BPS:\t\t");
scanf("%ld",&baud);
if(baud<10||baud>clock)printf("Error: 10~115200 is available !\n");
else {
int temp;
int ok=1;
while(ok){
if(clock%baud)baud--;
else break;
}
flag=0;
}
} flag=1;
while(flag){
printf("Please input Parity:\t\t");
scanf("%s",buffer);
if((buffer[0]|0x20)=='n')parity=None;
else if((buffer[0]|0x20)=='m')parity=Mark;
else if((buffer[0]|0x20)=='s')parity=Space;
else if((buffer[0]|0x20)=='o')parity=Odd;
else if((buffer[0]|0x20)=='e')parity=Even;
else {
printf("Error: N|O|E|M|S is available !\n");
continue;
}
flag=0;
}flag=1;
while(flag){
printf("Please input Data width:\t");
scanf("%d",&data);
if(data<5||data>8)printf("Error: 5~8 is available !\n");
else flag=0;
}flag=1;
while(flag){
printf("Please input Stop width:\t");
scanf("%d",&stop);
if(stop!=1&&stop!=2)printf("Error: 1~2 is available !\n");
else flag=0;
}
printf("------------------------------------\n");
initcom();
}
initcom()
{
long clock=Clock/16;
char config=0x0;
#if DEBUG
printf("com=%d\n",com);
printf("base=%d\n",base);
printf("parity=%d\n",parity);
printf("data=%d\n",data);
printf("stop=%d\n",stop);
printf("baud=%ld\n",baud);
#endif
outportb(base+LCR,0x80);
outport(base,((int)(clock/baud)));
#if DEBUG
printf("%x,%x\n",inportb(base+1),inportb(base));
#endif
switch(parity)
{
case None: config|=0x0; break;
case Mark: config|=0x28; break;
case Space: config|=0x38; break;
case Odd: config|=0x8; break;
case Even: config|=0x18; break;
default: config|=0x18; break;
}
switch(data)
{
case 5: config|=0x0; break;
case 6: config|=0x1; break;
case 7: config|=0x2; break;
case 8: config|=0x3; break;
default: config|=0x2; break;
}
switch(stop){
case 1: config|=0x0; break;
case 2: config|=0x4; break;
default: config|=0x0; break;
}
outportb(base+LCR,config);
#if DEBUG
printf("%x",config);
#endif
}
disp()
{
printf("\nCurrent Settings:\n");
printf("-------------------------------------");
printf("\nCOM:\t\tCOM%d\n",com);
printf("Base:\t\t0x%x\n",base);
printf("BPS:\t\t%ld bps\n",baud);
printf("Data:\t\t%d bits\n",data);
printf("Stop:\t\t%d bit(s)\n",stop);
if(parity==Odd)
printf("Parity:\t\tOdd\n");
else if(parity==Even)
printf("Parity:\t\tEven\n");
else if(parity==Space)
printf("Parity:\t\tSpace\n");
else if(parity==Mark)
printf("Parity:\t\tMark\n");
else printf("Parity:\t\tNone\n");
printf("-------------------------------------\n");
}
main(int argc, char **argv)
{
FILE *fp;
char filename[128];
int flag;
unsigned char temp;
int status;
fp=fopen("receive","wb");
if(fp)flag=1;
else flag=0;
com=1;
baud=9600;
base=0x3f8;
data=8;
stop=1;
parity=None;
initcom();
printf_flag='h';
for(;;)
{
while((inportb(base+5)&0x1)==0)
if(kbhit())
{
printf_flag2=printf_flag;
printf_flag=getch();
if(printf_flag=='Q'){if(flag)fclose(fp);return;}
else if(printf_flag=='h'||printf_flag=='H')printf_flag2=printf_flag;
else if(printf_flag=='A'||printf_flag=='a')printf_flag2=printf_flag;
else if(printf_flag==0xd||printf_flag==0xa){printf("\n"); printf_flag=printf_flag2;}
else if(printf_flag=='?'){ help(); printf_flag=printf_flag2; getch;}
else if(printf_flag=='c'||printf_flag=='C'){clrscr();printf_flag=printf_flag2;}
else if(printf_flag=='d'||printf_flag=='D'){disp(); printf_flag=printf_flag2;}
else if(printf_flag=='p'||printf_flag=='P'){getch(); printf_flag=printf_flag2;}
else if(printf_flag=='i'||printf_flag=='I'){send_now();printf_flag=printf_flag2;}
else if(printf_flag=='x'||printf_flag=='X'){send_file();printf_flag=printf_flag2;}
else if(printf_flag=='n'||printf_flag=='N')
{
printf("\nFile name:\t");
scanf("%s",filename);
if(flag==1)fclose(fp);
fp=fopen(filename,"wb");
if(fp)flag=1;
else {flag=0; printf("File can not Open!"); getch();}
printf_flag=printf_flag2;
}
else if(printf_flag=='s'||printf_flag=='S'){set(0); printf_flag=printf_flag2; }
else if(printf_flag=='1'){set(1); disp(); printf_flag=printf_flag2; }
else if(printf_flag=='2'){set(2); disp(); printf_flag=printf_flag2; }
else if(printf_flag=='3'){set(3); disp(); printf_flag=printf_flag2; }
else if(printf_flag=='4'){set(4); disp(); printf_flag=printf_flag2; }
else printf_flag=printf_flag2;
}
temp=inportb(base);
if(printf_flag=='h'||printf_flag=='H'){printf_flag2=printf_flag; printf("%02x ",temp);}
else if(printf_flag=='A'||printf_flag=='a'){printf_flag2=printf_flag; printf("%c",temp);}
else if(printf_flag==0xd||printf_flag==0xa){printf("\n"); printf_flag=printf_flag2;}
else if(printf_flag=='?'){ help(); getch(); printf_flag=printf_flag2; }
else if(printf_flag=='p'||printf_flag=='P'){getch(); printf_flag=printf_flag2;}
else if(printf_flag=='c'||printf_flag=='C'){clrscr();printf_flag=printf_flag2;}
else if(printf_flag=='i'||printf_flag=='I'){send_now();printf_flag=printf_flag2;}
else if(printf_flag=='x'||printf_flag=='X'){send_file();printf_flag=printf_flag2;}
else if(printf_flag=='n'||printf_flag=='N')
{
printf("\nFile name:\t");
scanf("%s",filename);
if(flag==1)fclose(fp);
fp=fopen(filename,"wb");
if(fp)flag=1;
else {flag=0; printf("File can not Open!"); getch();}
printf_flag=printf_flag2;
}
else if(printf_flag=='d'||printf_flag=='D'){disp(); printf_flag=printf_flag2; getch();}
else if(printf_flag=='s'||printf_flag=='S'){set(0); printf_flag=printf_flag2; }
else if(printf_flag=='1'){set(1); disp(); printf_flag=printf_flag2; }
else if(printf_flag=='2'){set(2); disp(); printf_flag=printf_flag2; }
else if(printf_flag=='3'){set(3); disp(); printf_flag=printf_flag2; }
else if(printf_flag=='4'){set(4); disp(); printf_flag=printf_flag2; }
else printf_flag=printf_flag2;
if(flag)fprintf(fp,"%c",temp);
if(kbhit())
{
printf_flag2=printf_flag;
printf_flag=getch();
if(printf_flag=='Q'){if(flag)fclose(fp);return;}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -