;_________________________________________________________________________________________________ ; ; ; Heinz - Volker Viehof ; Assembler Test - , Demo - und Beispieldateien ; Steuert DTR und RTS Leitung der RS 232 Schnittstelle ;_________________________________________________________________________________________________ .386 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD RegisterWinClass PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD PushButton PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD MsgLoop PROTO :DWORD Static PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD CreateFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD ExitProcess PROTO :DWORD CloseHandle PROTO :DWORD EscapeCommFunktion PROTO :DWORD,:DWORD ;_________________________________________________________________________________________________ ; ; Daten (initialisiert) ;_________________________________________________________________________________________________ .data szCaption db "Control RS 232",0 szClassName db "My_Class",0 szTextEnd db " Programm Beenden ",0 szText1 db " RTS-Leitung-Low ",0 szText2 db " RTS-Leitung-High ",0 szText3 db " DTR-Leitung-Low ",0 szText4 db " DTR-Leitung-High ",0 szText10 db "2004 Heinz - Volker Viehof ",10,13 db "Test - und DemoSoftware ",0 szText11 db "RS 232 Pinbelegung für 9pol Sub-D:",10,13 db "__________________________________",10,13 db " PIN 1 :i DCD DataCarryDetect ",10,13 db " PIN 2 :i RxD ReceiveData ",10,13 db " PIN 3 :o TxD TransmitData ",10,13 db " PIN 4 :o DTR DataTerminalReady ",10,13 db " PIN 5 : SG SignalGround ",10,13 db " PIN 6 :i DSR DataSetReady ",10,13 db " PIN 7 :o RTS RequestToSend ",10,13 db " PIN 8 :i CTS ClearToSend ",10,13 db " PIN 9 :i RI RingIndikator ",0 btnClass db "BUTTON",0 btnClass3 db "STATIC",0 prn db "COM1",0 ;_________________________________________________________________________________________________ ; ; nicht initialisierte Daten ;_________________________________________________________________________________________________ .data? hInstance dd ? hIcon dd ? hCursor dd ? hWnd dd ? hSelf dd ? hEnd dd ? hSelf2 dd ? hSelf3 dd ? hSelf4 dd ? hSelf5 dd ? hCom dd ? real dd ? ;_________________________________________________________________________________________________ ; ; Programm (Hauptteil) ;_________________________________________________________________________________________________ .code start: call Init call Main invoke ExitProcess,eax ;_________________________________________________________________________________________________ ; ; Subroutinen ;_________________________________________________________________________________________________ Init proc invoke GetModuleHandle, NULL mov hInstance, eax invoke LoadIcon,hInstance,IDI_APPLICATION mov hIcon, eax invoke LoadCursor,NULL,IDC_ARROW mov hCursor, eax ret Init endp Main proc LOCAL Wwd:DWORD,Wht:DWORD,Wtx:DWORD,Wty:DWORD mov Wtx,10 ;x koordinate oben links mov Wty,10 ;y koordinate oben links mov Wwd,280+280 ;+x= unten rechts mov Wht,200+120 ;+y= unten rechts invoke RegisterWinClass,ADDR WndProc,ADDR szClassName,hIcon,hCursor,COLOR_BTNFACE+3 invoke CreateWindowEx,WS_EX_CONTEXTHELP,ADDR szClassName,ADDR szCaption,\ WS_OVERLAPPEDWINDOW,Wtx,Wty,Wwd,Wht,NULL,NULL,hInstance,NULL mov hWnd,eax invoke CreateFile ,addr prn ,GENERIC_READ or GENERIC_WRITE ,0 ,0 ,OPEN_EXISTING ,\ FILE_ATTRIBUTE_NORMAL ,0 mov hCom,eax invoke Static,ADDR szText10,hWnd,40,20,240,40,500 invoke Static,ADDR szText11,hWnd,40,70,240,200,510 invoke PushButton,ADDR szText1,hWnd,320,20,180,20,610 mov hSelf,eax invoke PushButton,ADDR szText2,hWnd,320,40,180,20,620 mov hSelf2,eax invoke PushButton,ADDR szText3,hWnd,320,60,180,20,630 mov hSelf3,eax invoke PushButton,ADDR szText4,hWnd,320,80,180,20,640 mov hSelf4,eax ;invoke PushButton,ADDR szText5,hWnd,320,100,180,20,650 ;mov hSelf5,eax invoke PushButton,ADDR szTextEnd,hWnd,320,120,180,20,600 mov hEnd,eax invoke ShowWindow,hWnd, SW_SHOWNORMAL invoke UpdateWindow,hWnd invoke MsgLoop,0 ;hSelf ret Main endp m2m MACRO M1, M2 push M2 pop M1 ENDM ;_________________________________________________________________________________________________ ; ; andere Unterprogramme ;_________________________________________________________________________________________________ RegisterWinClass proc lpWndProc:DWORD,lpClassName:DWORD,Icon:DWORD,Cursor:DWORD, bColor:DWORD LOCAL wc:WNDCLASSEX mov wc.cbSize, sizeof WNDCLASSEX mov wc.style, CS_BYTEALIGNCLIENT or CS_BYTEALIGNWINDOW m2m wc.lpfnWndProc, lpWndProc mov wc.cbClsExtra, NULL mov wc.cbWndExtra, NULL m2m wc.hInstance, hInstance m2m wc.hbrBackground, bColor mov wc.lpszMenuName, NULL m2m wc.lpszClassName, lpClassName m2m wc.hIcon, Icon m2m wc.hCursor, Cursor m2m wc.hIconSm, Icon invoke RegisterClassEx,ADDR wc ret RegisterWinClass endp ;_________________________________________________________________________________________________ ; ; Message Loop ;_________________________________________________________________________________________________ MsgLoop proc hMSG:DWORD LOCAL msg:MSG StartLoop: invoke GetMessage,ADDR msg,0,0,0 .if eax == 0 jmp ExitLoop .endif invoke DispatchMessage ,ADDR msg jmp StartLoop ExitLoop: invoke CloseHandle ,hCom mov eax, msg.wParam ret MsgLoop endp ;_________________________________________________________________________________________________ WndProc proc hWin:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD .if uMsg == WM_DESTROY invoke CloseHandle ,hCom invoke PostQuitMessage,NULL mov eax, 0 ret .elseif wParam == 600 invoke CloseHandle ,hCom invoke PostQuitMessage,NULL mov eax, 0 ret .elseif wParam == 610 invoke EscapeCommFunction ,hCom ,CLRRTS call sound ret .elseif wParam == 620 invoke EscapeCommFunction ,hCom ,SETRTS call sound ret .elseif wParam == 630 invoke EscapeCommFunction ,hCom ,CLRDTR call sound ret .elseif wParam == 640 invoke EscapeCommFunction ,hCom ,SETDTR call sound ret .endif invoke DefWindowProc,hWin,uMsg,wParam,lParam ret WndProc endp ;_________________________________________________________________________________________________ PushButton proc lpText:DWORD,hParent:DWORD, a:DWORD,b:DWORD,wd:DWORD,ht:DWORD,ID:DWORD invoke CreateWindowEx,0, ADDR btnClass,lpText, WS_CHILD or WS_VISIBLE or BS_PUSHBUTTON or BS_NOTIFY, a,b,wd,ht,hParent,ID, hInstance,NULL ret PushButton endp ;_________________________________________________________________________________________________ ; ; piepton: ;_________________________________________________________________________________________________ sound proc invoke Beep ,1000,50 ret sound endp ;_________________________________________________________________________________________________ Static proc lpText:DWORD,hParent:DWORD, a:DWORD,b:DWORD,wd:DWORD,ht:DWORD,ID:DWORD invoke CreateWindowEx,WS_EX_STATICEDGE, ADDR btnClass3,lpText, WS_CHILD or WS_VISIBLE, a,b,wd,ht,hParent,ID, hInstance,NULL ret Static endp end start